Python logger配置DEBUG级别handler仍无法打印debug日志问题
问题原因分析
1. 初始版本代码的核心错误
你最初的代码里打印日志用的是logging.debug("App instance started"),这个调用的是根logger,不是你自定义绑定了handler的那个logger实例。根logger默认级别是WARNING,DEBUG级别的日志直接被根logger过滤了,根本到不了handler环节。
2. 修改后代码仍不输出的核心原因
你调整后代码虽然改用了自定义的logger.debug,但你只设置了handler的级别为DEBUG,没有设置logger本身的日志级别:
Python logging模块的日志过滤顺序是:
- 先检查当前logger本身的级别,如果日志级别低于logger设置的级别,直接丢弃,不会传递给任何handler,也不会向上传递
- 只有日志级别≥logger本身的级别,才会交给当前logger绑定的所有handler处理
- 之后再根据
propagate参数决定是否向上传递给父logger处理
你自定义的logger没有手动设置级别,默认会继承父logger的级别,根logger默认是WARNING,所以DEBUG级别的日志在logger层就被过滤了,自然不会输出。
解决方案
直接给你自定义的logger设置对应级别即可,修改代码如下:
logger = logging.getLogger(__name__) # 新增这行,设置logger本身的级别为DEBUG logger.setLevel(logging.DEBUG) console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) logger.addHandler(console_handler)
如果需要避免日志同时被父logger重复输出,可以额外加一行:
logger.propagate = False
内容的提问来源于stack exchange,提问作者Michael Smith
相关产品推荐
相关产品推荐

