Python配置logging后INFO级别日志无法写入log文件的问题
日志无法写入文件的修复方案
你的配置存在4处会直接导致日志失效的错误,逐个修正即可:
- 字典语法错误:
fileHandler配置段中'filename':'log_info.log'行末尾缺失逗号,Python解析字典时会直接报错 - 处理器类路径错误:
RotatingFileHandler的正确模块路径是logging.handlers.RotatingFileHandler,你写的logging.handler.RotatingFileHandler少了末尾的s,会导致类加载失败 - 日志器配置键名、值格式错误:自定义
xyz日志器的配置键错写为单数handler,正确键名是复数handlers;日志级别不需要套列表,且必须使用大写的INFO,小写info无法被logging模块识别 - 日志器绑定关系错误:你只给
xyz日志器绑定了文件处理器,但代码里获取的是root日志器,直接调用logging.info()也是走root日志器,而root日志器只绑定了wsgi流处理器,根本没有关联文件写入逻辑,自然不会把日志写到文件里。
修正后可直接运行的代码
如果需求是所有INFO级别日志同时输出到控制台、写入日志文件,直接把文件处理器加入root日志器的handlers列表即可,配置如下:
import logging.config config = { 'version': 1, 'disable_existing_loggers': False, 'formatters': {'default': { 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }}, 'handlers': {'wsgi': { 'class': 'logging.StreamHandler', 'stream': 'ext://flask.logging.wsgi_errors_stream', 'formatter': 'default' }, 'fileHandler':{ 'class':'logging.handlers.RotatingFileHandler', 'formatter':'default', 'filename':'log_info.log', 'maxBytes':512000, 'backupCount':5, 'encoding':'utf-8' }}, 'root': { 'level': 'INFO', 'handlers': ['wsgi', 'fileHandler'] } } logging.config.dictConfig(config) # 测试写入 logging.info('hi')
针对xyz目录下py文件的独立日志配置
如果需要xyz目录下的模块日志单独走文件规则、不输出到控制台,保留xyz日志器配置即可,注意修正键名和值格式,同时xyz目录下的所有py文件必须通过logging.getLogger(__name__)获取日志对象,这样生成的日志器名称会是xyz.abcd、xyz.efg格式,能自动匹配到你配置的xyz日志器规则,对应配置片段:
'xyz':{ 'handlers':['fileHandler'], 'level':'INFO', 'propagate': False }
propagate设为False可以避免xyz模块的日志向上传递给root日志器,防止控制台重复打印日志。
内容的提问来源于stack exchange,提问作者dummy
相关产品推荐
相关产品推荐

