You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Logging模块日志级别异常问题:StreamHandler无法输出Debug与Info级日志

问题修复:StreamHandler无法输出Debug/Info级日志

问题原因

你遇到的核心问题是logging模块的层级过滤机制:Python的日志系统会先通过「Logger本身的级别」过滤日志,再传递给对应的Handler做二次过滤。

默认情况下,根Logger(也就是你通过logging.getLogger()获取的顶级Logger)的级别是logging.WARNING,这意味着所有级别低于WARNING的日志(DEBUG、INFO)会直接被根Logger拦截,根本不会传递给你的StreamHandler——哪怕你给StreamHandler设置了DEBUG级别也没用。

修复方案

只需要给根Logger也设置DEBUG级别,让它允许DEBUG及以上的日志通过,这样StreamHandler才能接收到这些日志并输出到stdout。修改后的代码如下:

import logging
import sys

# 详细日志配置
logger = logging.getLogger()
# 新增:给根Logger设置DEBUG级别,放开低级日志的传递权限
logger.setLevel(logging.DEBUG)

file_handler = logging.FileHandler("logs.txt")
file_handler.setLevel(logging.ERROR)
stream_handler = logging.StreamHandler(stream=sys.stdout)
stream_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s | %(levelname)s | %(message)s")
stream_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
logger.addHandler(file_handler)

# 业务代码日志输出
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

验证效果

修改后运行代码,控制台会输出所有级别的日志:

2021-10-30 15:32:49,033 | DEBUG | debug message
2021-10-30 15:32:49,033 | INFO | info message
2021-10-30 15:32:49,034 | WARNING | warn message
2021-10-30 15:32:49,034 | ERROR | error message
2021-10-30 15:32:49,035 | CRITICAL | critical message

而logs.txt依然只会保留ERROR及以上级别的日志,完全符合你的预期。

补充说明

记住这个核心逻辑:Logger级别是第一道关卡,Handler级别是第二道关卡。只有日志级别同时满足「≥Logger级别」和「≥Handler级别」时,才会被最终输出。如果Logger级别设置得太高,低级别的日志连Handler都到不了。

内容的提问来源于stack exchange,提问作者Data Mastery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 21:12:44