Python logging的FileHandler仅记录error日志不记录其他级别如何解决
1. 配置存在的问题
Python logging模块的日志过滤遵循双层规则:日志首先会经过Logger实例本身的级别过滤,只有通过过滤的日志才会下发到绑定的各个Handler做二次级别过滤。
你的代码中只给FileHandler设置了DEBUG级别,但调用logging.getLogger()拿到的是root Logger实例,它的默认日志级别是WARNING,仅允许级别>=WARNING的日志通过。INFO级别低于WARNING,直接被root Logger拦截,不会传递到FileHandler,因此日志文件中仅能看到ERROR级别的日志。
2. 实现任意级别日志写入FileHandler的方案
只需要在配置时主动将root Logger的级别也设置为DEBUG即可,确保所有级别的日志都能通过Logger层的过滤,下发到FileHandler处理。
修改后的code.py代码如下:
import sys import logging def setup_logging(): global logger logger = logging.getLogger() # 新增以下行,设置root Logger的级别为DEBUG logger.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') open('data_module.log', 'w').close() # 清空日志内容 global fileHandler fileHandler = logging.FileHandler('data_module.log') fileHandler.setFormatter(formatter) fileHandler.setLevel(logging.DEBUG) logger.addHandler(fileHandler) logger.error('Started') # 错误日志 logger.info('information') # 信息日志
修改后运行test.py,日志文件会同时包含ERROR和INFO两条日志,断言可以正常通过。
内容的提问来源于stack exchange,提问作者StressedBoi69420
相关产品推荐
相关产品推荐

