我正在尝试uvicorn,每当服务器运行时,它都显示INFO:uvicorn.error:Application
。我如何查看导致错误的原因?如何在日志中打印错误?
» uvicorn serve:app --reload --log-level debug
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [207627] using statreload
INFO: Started server process [207629]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO:uvicorn.error:Application startup complete.
我试过log-level
,但似乎不起作用
» uvicorn serve:app --reload --log-level trace
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [207665] using statreload
INFO: Started server process [207667]
INFO: Waiting for application startup.
TRACE: ASGI [1] Started scope={'type': 'lifespan', 'asgi': {'version': '3.0', 'spec_version': '2.0'}}
TRACE: ASGI [1] Receive {'type': 'lifespan.startup'}
TRACE: ASGI [1] Send {'type': 'lifespan.startup.complete'}
TRACE:uvicorn.asgi:ASGI [1] Send {'type': 'lifespan.startup.complete'}
INFO: Application startup complete.
INFO:uvicorn.error:Application startup complete.
3条答案
按热度按时间enxuqcxy1#
找不到错误的原因是它不是错误,而是记录器的名称(在
uvicorn/main.py
中设置):如果查看该模块的
startup()
函数内部,会发现有一个logger.info(...
,它使用名为uvicorn.error
的记录器生成您看到的日志消息。有一个公开的(在撰写本文时是公开的)关于记录器名称令人困惑的问题(但好消息是它只是一个名称而不是错误):https://github.com/encode/uvicorn/issues/562
nqwrtyyt2#
Ben解释了部分原因,我不认为是uvicorn的bug,但提问者没有正确配置logger。
Uvicorn有一些内部日志记录器,如
uvicorn
,uvicorn:access
,uvicorn.error
,uvicorn.asgi
。默认情况下,uvicorn.error
日志记录器会传播消息。INFO: Application startup complete.
是由uvicorn.error
记录器记录的。INFO:uvicorn.error:Application startup complete.
是由某个父记录器记录的,可能是root
处理程序。解决方案是停止由两个记录器处理的消息。
1.停止设置父记录器的处理程序,可能是
root
记录器。(首选)1.或关闭
uvicorn.error
传播。tvokkenx3#
我为此创建了另一个解决方案。我创建了一个类NameFilter,它过滤掉不同的日志记录器名称并直接重命名它们。
logger.py 〉使用方法
logger.py 〉分类