Python Logging的File Handler不生效无法写入日志文件如何解决?
Python Logging FileHandler无法写入问题修复说明
核心遗漏点
你没有显式配置自定义logger实例本身的日志级别。Python logging模块中,未手动设置级别的logger会默认继承父级logger的级别,根logger默认级别为logging.WARNING。
你输出的info级别的日志优先级低于WARNING,因此消息直接被logger本身拦截,没有传递到后续绑定的FileHandler中,导致文件无写入内容。
修复方案
在添加Handler之前,给你创建的test logger手动设置级别即可,示例代码如下:
import logging logger=logging.getLogger('test') # 新增配置:设置logger本身的日志级别为DEBUG,允许INFO及以上级别消息通过 logger.setLevel(logging.DEBUG) #create a stream handler for logging out to console. stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.ERROR) #create a file handler for logging to file file_handler = logging.FileHandler('logs',mode='a') file_handler.setLevel(logging.DEBUG) logger.addHandler(file_handler) logger.addHandler(stream_handler) logger.info("this is info")
补充说明
logging模块的日志过滤顺序如下:
- 首先校验消息级别是否 ≥ logger本身的级别,不满足则直接丢弃,不会进入Handler处理流程
- 满足logger级别后,消息会分发到所有绑定的Handler,依次校验消息级别是否 ≥ Handler的级别,满足则执行对应输出逻辑
按照上述修改后,INFO级别的日志会通过logger校验,且匹配FileHandler的DEBUG级别,就会正常写入logs文件;同时因为StreamHandler的级别为ERROR,INFO日志不会输出到控制台,符合预期配置。
内容的提问来源于stack exchange,提问作者rooni
相关产品推荐
相关产品推荐

