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

Python日志配置异常:Info输出控制台/Warning等输出文件出错

Python logging 日志分流问题修复

你的代码出现两个问题:文件日志串流到控制台、控制台日志重复,根源都是logging默认的日志传播机制——所有子logger的日志默认会向上传递给父级logger(也就是根logger),而根logger默认自带一个输出到控制台的StreamHandler,所以会额外输出一遍日志。

错误原因拆解

  • 文件日志出现在控制台:file_log这个子logger的WARNING日志会传播到根logger,根logger的默认StreamHandler把它输出到了控制台。
  • 控制台日志重复:console_log的INFO日志不仅自己的StreamHandler输出一次,还会传给根logger的StreamHandler再输出一次,所以重复了。

修复方案1:关闭子logger的日志传播

给两个子logger加上propagate = False,阻止日志向上传递到根logger:

import logging

console_log = logging.getLogger("CONSOLE")
console_log.setLevel(logging.INFO)
console_log.propagate = False  # 关闭日志传播

stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
console_log.addHandler(stream_handler)

file_log = logging.getLogger("FILE")
file_log.setLevel(logging.WARNING)
file_log.propagate = False  # 关闭日志传播

file_handler = logging.FileHandler('log.txt')
file_handler.setLevel(logging.WARNING)
file_log.addHandler(file_handler)

def log_to_console(message):
  console_log.info(message)  

def log_to_file(message):
  file_log.warning(message)

log_to_console("THIS SHOULD SHOW ONLY IN CONSOLE")
log_to_file("THIS SHOULD SHOW ONLY IN FILE")

修复方案2:更简洁的单logger多handler配置

其实没必要创建两个独立logger,用一个logger同时挂载控制台和文件两个handler,分别设置级别即可,逻辑更清晰:

import logging

# 初始化自定义logger
logger = logging.getLogger("APP_LOG")
logger.setLevel(logging.INFO)  # 总级别设为最低的INFO,确保所有符合条件的日志能被handler处理
logger.propagate = False  # 关闭传播避免根logger重复输出

# 控制台handler:仅处理INFO及以上级别日志
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
logger.addHandler(stream_handler)

# 文件handler:仅处理WARNING及以上级别日志
file_handler = logging.FileHandler('log.txt')
file_handler.setLevel(logging.WARNING)
logger.addHandler(file_handler)

# 测试日志输出
logger.info("THIS SHOULD SHOW ONLY IN CONSOLE")
logger.warning("THIS SHOULD SHOW ONLY IN FILE")
logger.error("THIS SHOULD ALSO SHOW IN FILE")
logger.critical("THIS SHOULD ALSO SHOW IN FILE")

修改后,INFO日志只会输出到控制台,WARNING、ERROR、CRITICAL级别日志仅写入文件,不会再出现串流和重复的问题。

内容的提问来源于stack exchange,提问作者Tiago Silveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:25:21