我的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]这包括引发的任何异常,您将获得整个堆栈跟踪两次。我已经看到一些答案,建议只删除Uvicorn的日志处理程序,但这感觉是错误的。如果有一个日志事件发生在堆栈的Uvicorn层,而不是在FastAPI中呢?
有没有一种方法只获得一次日志输出,而不只是覆盖uvicorn的日志处理程序?
发布于 2021-08-16 17:35:16
FastAPI不做太多的日志记录。您是如何运行fastapi的,使用gunicorn还是不使用它?从你给出的信息来看,这还不足以说明复制的来源。但不管怎样,我们还是能找到解决办法的。
uvicorn.error是uvicorn用于错误消息的内部记录器。propagate是此记录器的默认行为。一个重复行必须来自uvicorn.error上的处理程序,另一个来自上/父记录器。
解决方案是停止由两个记录器处理的msg。
root记录器)设置处理程序uvicorn.error传播。
logger = logging.getLogger("uvicorn.error") logger.propagate = False当您使用最新版本的uvicorn运行gunicorn + uvicorn和UvicornWorker时,这不应该是一个问题。
发布于 2022-08-12 09:59:08
只需删除uvicorn处理程序:
logging.getLogger("uvicorn").handlers.clear()发布于 2021-10-04 23:22:55
另外,如果它对某人有帮助,此页是非常有用的。此外,在调用代码中的SQLAlchemy ()之后,setup_logging被初始化时,我遇到了一个问题。一旦我将其更改为立即初始化,就会删除重复的日志。
https://stackoverflow.com/questions/68733567
复制相似问题