当前位置: 首页 > 知识库问答 >
问题:

Uvicorn/FastAPI重复日志记录

秦宁
2023-03-14

我的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的日志处理程序?

共有3个答案

严知
2023-03-14

如果它对某人有帮助,我也遇到了完全相同的问题,我无法理解为什么刚安装的fastapi项目不会打印重复的日志消息。我发现我在调用另一个模块时出错了:logging。基本配置(level=logging.INFO)。对此的评论解决了问题。

寿毅庵
2023-03-14

FastAPI不做太多日志记录。您如何运行fastapi,使用gunicorn或不使用它~~从你提供的信息来看,这还不足以说明复制品的来源。~~但无论如何,我们仍然可以找到解决办法。

uvicorn.erroruvicorn用于错误msg的内部记录器。其中一个重复行必须来自uvicorn.error上的处理程序,另一个来自上/父记录器。

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

>

或禁用uvicorn。传播时出错。

logger = logging.getLogger("uvicorn.error")
logger.propagate = False

当您使用最新版本的uvicorn时,使用UvicornWorker运行Gunicornuvicorn时,这应该不是问题。

康锦
2023-03-14

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

 类似资料:
  • 我正在学习Fastapi,我正在localhost启动一个uvicorn服务器。每当出现错误/异常时,我都不会得到回溯。所有我得到的是: 所以,调试很困难,我正在试用python的日志模块 我还尝试过使用调试参数启动uvicorn

  • Supported tags and respective Dockerfile links python3.9, latest (Dockerfile) python3.8, (Dockerfile) python3.7, (Dockerfile) python3.6 (Dockerfile) python3.9-slim (Dockerfile) python3.8-slim (Dockerf

  • 我有一个本地运行的服务器。当我在AWS EC2上运行它并在8000端口上从外部发送请求时,我得到以下错误: 如果您能告诉我如何在端口80上执行此操作,那将非常好。

  • 问题内容: 我正在使用python记录器。以下是我的代码: 我的问题是我在每个呼叫的日志文件中都有多个条目。我该如何解决? 问题答案: 该已经是一个单例。(文件) 问题在于,每次调用时,都会向实例添加另一个处理程序,这将导致日志重复。 也许像这样?

  • 我创建了一个个人使用的基本应用程序。我的应用程序的支持使用快速Api和SQLite数据库。通常要运行我的启动和运行我的后端服务器,我必须使用以下命令: 我以前见过其他人创建python可执行文件。我也想这样做,但我需要它来启动uvicorn服务器。如何创建运行uvicorn服务器的python可执行文件? 还是只编写一个执行此操作的批处理脚本更好?

  • 问题内容: 我刚刚实现了Winston Logging,它可以按预期工作,但是遇到了一些我找不到答案的问题。 据我所知,winston的工作方式是设置的日志级别,以及使用优先级以下的任何东西,例如出错时,它还将包括信息日志等。是否有一种创建特定日志级别的方法可以称之为HTTP还是db,我只将http或db事件记录到日志中,而它们并没有出现在合并的文件或控制台中? 问题答案: 更好的解决方案是使用具