【发布时间】:2020-12-30 13:52:00
【问题描述】:
我正在开发一个简单的 Flask-RESTful API,我对它非常陌生,并且遇到了一些日志记录问题。
使用export FLASK_ENV=development,Werkzeug 记录器不会记录任何 HTTP 请求,例如 GET、POST 等。
当export FLASK_ENV=production一切正常时,几个简单的日志可以是这样的:
2020-12-30 14:01:03,723 | INFO | werkzeug | 127.0.0.1 - - [30/Dec/2020 14:01:03] "GET /list/2 HTTP/1.1" 200 -
2020-12-30 14:01:03,742 | INFO | werkzeug | 127.0.0.1 - - [30/Dec/2020 14:01:03] "PUT /list/2 HTTP/1.1" 201 -
2020-12-30 14:01:03,749 | INFO | werkzeug | 127.0.0.1 - - [30/Dec/2020 14:01:03] "DELETE /list/2 HTTP/1.1" 204 -
主要问题可能来自我的logger.py 中的logging.dictConfig,因为使用简单的logging.basicConfig 会正常创建日志。我的logger.py 看起来像这样:
import logging as log
from logger.config import dictConfig
dictConfig(
{
"version": 1,
"formatters": {
"precise": {
"format": "%(asctime)s | %(levelname)s | %(name)s | %(module)s | %(message)s"
},
"brief": {"format": "%(asctime)s | %(levelname)s | %(message)s"},
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"stream": "ext://sys.stdout",
"formatter": "brief",
"level": "WARNING",
},
"file": {
"class": "logging.handlers.RotatingFileHandler",
"formatter": "precise",
"filename": "logs/api.log",
"maxBytes": 1024 ** 2,
"backupCount": 1,
},
},
"root": {"level": "DEBUG", "handlers": ["console", "file"]},
}
)
在我的__init__.py中我导入log,这意味着我可以在create_app()或其他模块中使用log.info()等创建日志。
但是,根据Flask文档(https://flask.palletsprojects.com/en/1.1.x/logging/),也可能是我的配置时间问题造成的:
基本配置
当您想为您的项目配置日志记录时,您应该在程序启动时尽快进行。如果在配置日志记录之前访问app.logger,它将添加一个默认处理程序。如果可能,请在创建应用程序对象之前配置日志记录。
当export FLASK_ENV=development 时,我确实注意到 Werkzeug 在我的任何日志之前记录了一些内容。我很惊讶这可能是这种情况,因为使用logging.basicConfig 来配置它,它就像一个魅力。而我在__init__.py 做的第一件事就是导入记录器;这意味着我真的不能再早点这样做了..
【问题讨论】:
标签: python flask logging flask-restful