首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Uvicorn/FastAPI重复日志记录

Uvicorn/FastAPI重复日志记录
EN

Stack Overflow用户
提问于 2021-08-10 21:18:07
回答 4查看 9.5K关注 0票数 11

我的FastAPI应用程序似乎记录了很多东西两次。

代码语言:javascript
复制
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的日志处理程序?

EN

回答 4

Stack Overflow用户

发布于 2021-08-16 17:35:16

FastAPI不做太多的日志记录。您是如何运行fastapi的,使用gunicorn还是不使用它?从你给出的信息来看,这还不足以说明复制的来源。但不管怎样,我们还是能找到解决办法的。

uvicorn.erroruvicorn用于错误消息的内部记录器。propagate是此记录器的默认行为。一个重复行必须来自uvicorn.error上的处理程序,另一个来自上/父记录器。

解决方案是停止由两个记录器处理的msg。

  1. 停止为父记录器(可能是root记录器)设置处理程序
  2. 禁用uvicorn.error传播。 logger = logging.getLogger("uvicorn.error") logger.propagate = False

当您使用最新版本的uvicorn运行gunicorn + uvicornUvicornWorker时,这不应该是一个问题。

票数 3
EN

Stack Overflow用户

发布于 2022-08-12 09:59:08

只需删除uvicorn处理程序:

代码语言:javascript
复制
logging.getLogger("uvicorn").handlers.clear()
票数 3
EN

Stack Overflow用户

发布于 2021-10-04 23:22:55

另外,如果它对某人有帮助,此页是非常有用的。此外,在调用代码中的SQLAlchemy ()之后,setup_logging被初始化时,我遇到了一个问题。一旦我将其更改为立即初始化,就会删除重复的日志。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68733567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档