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

如何创建新StreamHandler且不丢失日志输出行中的模块名?

解决日志StreamHandler替换后丢失模块名的问题

问题出在你新建的StreamHandler没有配置日志格式——logging.basicConfig自动给默认Handler设置了包含日志级别、模块名的格式,所以之前能看到INFO:__main__:hello;而你手动创建的StreamHandler默认只输出消息内容,所以只会显示hello。

要保留模块名,只需要给新的StreamHandler指定格式即可,用logging.Formatter定义包含%(name)s(模块名占位符)的格式字符串就行,比如默认的格式'%(levelname)s:%(name)s:%(message)s'。

修改后的代码如下:

import logging

logging.basicConfig(level=logging.INFO)

LOG = logging.getLogger(__name__)

# 移除根日志器的旧Handler
for handler in logging.getLogger().handlers:
    logging.getLogger().removeHandler(handler)

# 创建新的StreamHandler并设置格式
new_handler = logging.StreamHandler()
new_handler.setFormatter(logging.Formatter('%(levelname)s:%(name)s:%(message)s'))
logging.getLogger().addHandler(new_handler)

# 现在输出会显示:INFO:__main__:hello
LOG.info('hello')

如果需要自定义其他格式,也可以调整Formatter的字符串,比如加上时间'%(asctime)s - %(levelname)s - %(name)s - %(message)s',按需修改即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:32:04