From 79cef1c70c9167dcedf2d3ffb2c2a044348bad52 Mon Sep 17 00:00:00 2001 From: Pierre Delagrave Date: Fri, 26 Apr 2024 15:06:22 -0400 Subject: [PATCH] Logging app initialization failure using config.log On exiting due to an unhandled exception during the app initialization (lifespan), the process(es) spawned by `multiprocessing.BaseContext.Process.start()` in `_populate()` would have their stack traceback directly printed to stderr by `BaseProcess:_bootstrap`. Using the user-configurable `config.log` logger instead makes the log output more consistent. --- src/hypercorn/asyncio/run.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/hypercorn/asyncio/run.py b/src/hypercorn/asyncio/run.py index 93bd7fc5..f19d564d 100644 --- a/src/hypercorn/asyncio/run.py +++ b/src/hypercorn/asyncio/run.py @@ -85,7 +85,11 @@ def _signal_handler(*_: Any) -> None: # noqa: N803 if lifespan_task.done(): exception = lifespan_task.exception() if exception is not None: - raise exception + await config.log.exception( + "Error initializing ASGI app", + exc_info=(type(exception), exception, exception .__traceback__) + ) + exit(1) if sockets is None: sockets = config.create_sockets()