Python logging模块问题:StreamHandler无法输出DEBUG与INFO日志
为什么我的Python logging无法记录DEBUG和INFO级别的日志?
嘿,这个问题我刚学logging的时候也踩过!核心原因很简单:你只给Handler设置了DEBUG级别,却忘了给Logger本身设置级别。
Python的日志系统是双层过滤机制:一条日志要最终输出,得先过Logger这一关,再过Handler这一关。默认情况下,Logger的级别是logging.WARNING,所以哪怕你的Handler愿意接收DEBUG日志,Logger已经先把DEBUG和INFO级别的日志直接过滤掉了,根本到不了Handler那里。
怎么修复?
只需要在创建Logger之后,加上一行设置Logger级别的代码就行:
import logging if __name__ == "__main__" : logger = logging.getLogger("test") # 关键:给Logger设置DEBUG级别,让它允许DEBUG及以上的日志通过 logger.setLevel(logging.DEBUG) c_handler = logging.StreamHandler() c_handler.setLevel(logging.DEBUG) logger.addHandler(c_handler) # 测试日志 logger.debug('This is a debug message') logger.info('This is an info message') logger.warning('This is a warning message') logger.error('This is an error message') logger.critical('This is a critical message')
额外唠两句
- 如果不给Logger显式设置级别,它会继承父Logger的级别,而根Logger的默认级别就是WARNING
- 你可以灵活搭配Logger和Handler的级别:比如Logger设DEBUG,Handler设INFO,这样DEBUG日志会被Logger放行,但被Handler拦截,不会输出;反过来如果Logger级别比Handler高,那低级别日志连Logger这关都过不了
修改后再运行代码,就能得到你预期的全部日志输出了!
内容的提问来源于stack exchange,提问作者user2071786
相关产品推荐
相关产品推荐

