FLASK_ENV=development时Werkzeug不记录HTTP请求的问题排查
解决Flask开发环境下Werkzeug HTTP请求日志不显示的问题
嘿,我帮你搞定这个Flask日志的问题!你遇到的现象其实是开发环境下Werkzeug日志的默认行为和你的dictConfig配置冲突导致的,咱们一步步拆解:
问题根源分析
- 开发环境的日志自动初始化特性:当
FLASK_ENV=development时,Flask会自动给werkzeug日志器添加一个默认控制台处理器,但这个处理器会被你后续的dictConfig配置覆盖。而你的根日志器控制台处理器级别设置为WARNING,但Werkzeug的HTTP请求日志属于INFO级别,直接被过滤掉了。生产环境下Flask不会自动添加这个默认处理器,所以你的配置能正常捕获INFO级日志。 dictConfig与basicConfig的差异:logging.basicConfig会给所有日志器(包括Werkzeug)设置兜底的处理器和级别,Werkzeug自身的INFO级日志能正常输出;但你的dictConfig中控制台处理器的级别设得太高,直接挡住了这些请求日志。
解决方案
方案1:降低控制台处理器的全局级别
最简单的办法就是把控制台处理器的level从WARNING改成INFO,让Werkzeug的请求日志能通过控制台输出:
"handlers": { "console": { "class": "logging.StreamHandler", "stream": "ext://sys.stdout", "formatter": "brief", "level": "INFO", # 修改此处级别 }, "file": { "class": "logging.handlers.RotatingFileHandler", "formatter": "precise", "filename": "logs/api.log", "maxBytes": 1024 ** 2, "backupCount": 1, }, }
方案2:单独配置Werkzeug日志器(推荐)
如果不想降低全局控制台的日志级别,可以单独给werkzeug日志器配置专属处理器,避免影响其他模块的日志输出:
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, }, # 新增Werkzeug专属控制台处理器 "werkzeug_console": { "class": "logging.StreamHandler", "stream": "ext://sys.stdout", "formatter": "brief", "level": "INFO", }, }, "root": {"level": "DEBUG", "handlers": ["console", "file"]}, # 单独配置werkzeug日志器,覆盖默认设置 "loggers": { "werkzeug": { "level": "INFO", "handlers": ["werkzeug_console", "file"], "propagate": False, # 防止日志被根日志器重复处理 } }, } )
额外说明
关于你提到的配置时机问题:开发环境下Flask确实会在创建应用时提前初始化Werkzeug的日志器,但通过第二种方案,我们明确指定了werkzeug日志器的配置,会直接覆盖默认设置,所以不管初始化顺序如何都能生效。
内容的提问来源于stack exchange,提问作者Anders BB
相关产品推荐
相关产品推荐

