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

Python中输出到Std.out的日志未按格式显示问题

解决Python日志控制台输出格式不匹配的问题

嘿,我刚好碰到过这个问题!你的代码里控制台日志格式不对的原因很明确:你手动添加的StreamHandler没有继承basicConfig里设置的格式规则。

问题根源拆解

当你调用logging.basicConfig(filename="logname", ...)时,它会为根日志器自动创建一个FileHandler,并且给这个handler绑定了你定义的格式和日期格式。但之后你通过logging.getLogger().addHandler(logging.StreamHandler())添加的新控制台handler,它默认使用的是日志模块的默认格式(仅显示日志级别和消息内容),所以才会出现文件日志格式正常、控制台日志格式混乱的情况。

修复方案:给StreamHandler手动设置格式

你只需要在创建StreamHandler的时候,给它指定和文件日志完全一致的Formatter就行,修改后的代码如下:

import logging

# 先统一定义格式规则,方便复用
log_formatter = '%(asctime)s,%(msecs)03d %(name)s %(levelname)s %(message)s'
date_formatter = '%D %H:%M:%S'

# 配置文件日志的基础设置
logging.basicConfig(
    filename="logname",
    filemode='a',
    format=log_formatter,
    datefmt=date_formatter,
    level=logging.DEBUG
)

# 获取根日志器实例
root_logger = logging.getLogger()

# 创建控制台handler并绑定格式
stream_handler = logging.StreamHandler()
formatter = logging.Formatter(log_formatter, datefmt=date_formatter)
stream_handler.setFormatter(formatter)

# 将控制台handler添加到根日志器
root_logger.addHandler(stream_handler)

# 测试日志输出
logging.info("=================================================")
logging.info("starting execution")

为什么这样管用?

日志模块里的每个Handler(不管是文件还是控制台)都有自己独立的Formatter配置。basicConfig只会给它自动创建的那个Handler(这里是FileHandler)应用你定义的格式,而你后来手动添加的StreamHandler必须单独配置格式,才能和文件日志保持一致的输出风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:10:41