Rya*_*dge 14 logging fastapi uvicorn
我的 FastAPI 应用程序似乎将很多事情记录两次。
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [21360] using statreload
INFO: Started server process [21362]
INFO:uvicorn.error:Started server process [21362]
INFO: Waiting for application startup.
INFO:uvicorn.error:Waiting for application startup.
INFO: Application startup complete.
INFO:uvicorn.error:Application startup complete.
^CINFO: Shutting down
INFO:uvicorn.error:Shutting down
INFO: Waiting for application shutdown.
INFO:uvicorn.error:Waiting for application shutdown.
INFO: Application shutdown complete.
INFO:uvicorn.error:Application shutdown complete.
INFO: Finished server process [21362]
INFO:uvicorn.error:Finished server process [21362]
INFO: Stopping reloader process [21360]
Run Code Online (Sandbox Code Playgroud)
这包括引发的任何异常,您将获得整个堆栈跟踪两次。我看到一些答案建议删除 Uvicorn 的日志处理程序,但这感觉不对。如果日志记录事件发生在堆栈的 Uvicorn 层而不是 FastAPI 中怎么办?
有没有办法只获取一次日志输出而不覆盖 uvicorn 的日志处理程序?
只需删除uvicorn
处理程序:
logging.getLogger("uvicorn").handlers.clear()
Run Code Online (Sandbox Code Playgroud)
FastAPI 不做太多日志记录。fastapi
无论有没有它,你如何跑步gunicorn
?~~从你提供的信息中,还不足以判断重复项来自哪里。~~但无论如何,我们仍然可以找到解决方案。
uvicorn.error
是用于uvicorn
错误消息的内部记录器。 propagate
是此记录器的默认行为。重复行之一必须来自 handler on uvicorn.error
,另一行来自上/父记录器。
解决方案是停止由两个记录器处理的消息。
停止为父记录器(可能是root
记录器)设置处理程序
或禁用uvicorn.error
传播。
logger = logging.getLogger("uvicorn.error")
logger.propagate = False
Run Code Online (Sandbox Code Playgroud)
当您使用最新版本的 uvicorn 时,运行gunicorn
+ uvicorn
with时这应该不是问题。UvicornWorker
归档时间: |
|
查看次数: |
21499 次 |
最近记录: |