为什么我日志记录时FastAPI不创建日志文件
下面是我使用的代码
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‘不是自动生成的,不像在烧瓶中那样。还有其他配置吗?
发布于 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.dictConfig和https://www.uvicorn.org/settings/#logging中提到的那样
下面是一个示例log.ini文件
[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的方法。
发布于 2021-11-02 11:58:17
我想知道如何让FastAPI同时登录到文件和控制台。普拉蒂克的回答让我得到了大部分的帮助,但我发现Uvicorn只是在登录文件。至少,当Uvicorn集成到我的主要脚本中时是这样的:
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")因此,我想我会分享我的适应解决方案,谁可能遇到相同的问题时,试图登录到控制台和文件。
[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发布于 2020-08-27 15:30:46
我认为问题在于您使用的是快速记录器,但也有uvicorn.error、uvicorn.access和uvicorn记录器,请尝试向这个记录器添加处理程序。
https://stackoverflow.com/questions/60715275
复制相似问题