首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FASTAPI日志到文件

FASTAPI日志到文件
EN

Stack Overflow用户
提问于 2020-03-17 01:52:49
回答 5查看 20.2K关注 0票数 7

为什么我日志记录时FastAPI不创建日志文件

下面是我使用的代码

代码语言:javascript
复制
from fastapi.logger import logger as fastapi_logger
from logging.handlers import RotatingFileHandler
import logging

formatter = logging.Formatter(
        "[%(asctime)s.%(msecs)03d] %(levelname)s [%(thread)d] - %(message)s", "%Y-%m-%d %H:%M:%S")
handler = RotatingFileHandler('logfile.log', backupCount=0)
logging.getLogger("fastapi")
fastapi_logger.addHandler(handler)
handler.setFormatter(formatter)

fastapi_logger.info('****************** Starting Server *****************')

文件'logfie.log‘不是自动生成的,不像在烧瓶中那样。还有其他配置吗?

EN

回答 5

Stack Overflow用户

发布于 2021-04-29 03:16:58

您将需要通过一些服务器运行FastAPI,如Uvicorn、Hypercorn或AsyncIO

即使在您的FastAPI文件中正确配置了日志记录,您也可以通过服务器运行该应用程序。您不需要在FastAPI级别配置处理程序。只需使用logger.info,您的日志将被发送到服务器。

要配置Uvicorn日志记录,您需要使用pass作为dict配置或文件配置,如https://docs.python.org/3/library/logging.config.html#logging.config.dictConfighttps://www.uvicorn.org/settings/#logging中提到的那样

下面是一个示例log.ini文件

代码语言:javascript
复制
[loggers]
keys=root

[handlers]
keys=logfile

[formatters]
keys=logfileformatter

[logger_root]
level=INFO
handlers=logfile

[formatter_logfileformatter]
format=[%(asctime)s.%(msecs)03d] %(levelname)s [%(thread)d] - %(message)s

[handler_logfile]
class=handlers.RotatingFileHandler
level=INFO
args=('logfile.log','a')
formatter=logfileformatter

然后使用它作为uvicorn example:app --log-config /path/to/log.ini

Hypercorn和AsyncIO有各自的传递配置对象https://docs.python.org/3/library/asyncio-dev.html的方法。

票数 8
EN

Stack Overflow用户

发布于 2021-11-02 11:58:17

我想知道如何让FastAPI同时登录到文件和控制台。普拉蒂克的回答让我得到了大部分的帮助,但我发现Uvicorn只是在登录文件。至少,当Uvicorn集成到我的主要脚本中时是这样的:

代码语言:javascript
复制
if __name__ == "__main__":
    cwd = pathlib.Path(__file__).parent.resolve()
    uvicorn.run(app, host="0.0.0.0", port=5000, log_config=f"{cwd}/log.ini")

因此,我想我会分享我的适应解决方案,谁可能遇到相同的问题时,试图登录到控制台和文件。

代码语言:javascript
复制
[loggers]
keys=root

[handlers]
keys=logfile,logconsole

[formatters]
keys=logformatter

[logger_root]
level=INFO
handlers=logfile, logconsole

[formatter_logformatter]
format=[%(asctime)s.%(msecs)03d] %(levelname)s [%(thread)d] - %(message)s

[handler_logfile]
class=handlers.RotatingFileHandler
level=INFO
args=('logfile.log','a')
formatter=logformatter

[handler_logconsole]
class=handlers.logging.StreamHandler
level=INFO
args=()
formatter=logformatter
票数 5
EN

Stack Overflow用户

发布于 2020-08-27 15:30:46

我认为问题在于您使用的是快速记录器,但也有uvicorn.erroruvicorn.accessuvicorn记录器,请尝试向这个记录器添加处理程序。

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

https://stackoverflow.com/questions/60715275

复制
相关文章

相似问题

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