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

如何使用Python logging同时将日志输出到屏幕与文件(Python 2.7.14)

实现Python 2.7 logging同时输出到屏幕和文件

嘿,刚好在Python 2.7.14里折腾过这个需求,我来给你捋清楚怎么做~

首先得说清楚:Python 2.7的logging.basicConfig()不像Python 3.3+那样支持直接通过handlers参数指定多个输出目标,它默认只能二选一——要么输出到屏幕(默认的StreamHandler),要么输出到文件(指定filename后会换成FileHandler)。不过我们可以通过手动添加额外的Handler来实现双输出,而且依然可以先用basicConfig搞定其中一个输出的配置,再补另一个。

给你一个完整的示例代码,优先用basicConfig配置文件输出,再添加屏幕输出的Handler:

import logging

# 第一步:用basicConfig配置文件日志的基础参数
# 这里指定了日志级别、输出文件、日志格式和时间格式
logging.basicConfig(
    level=logging.DEBUG,
    filename='a.log',
    format='%(asctime)s - %(levelname)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)

# 第二步:获取根Logger实例
root_logger = logging.getLogger()

# 第三步:创建屏幕输出的StreamHandler,并配置参数
console_handler = logging.StreamHandler()
# 设置屏幕输出的日志级别(可以和文件一致,也可以单独设置,比如只输出INFO及以上)
console_handler.setLevel(logging.DEBUG)
# 给屏幕输出设置格式(可以和文件不同,这里用更简洁的格式)
console_formatter = logging.Formatter('%(levelname)s: %(message)s')
console_handler.setFormatter(console_formatter)

# 第四步:把屏幕Handler添加到根Logger里
root_logger.addHandler(console_handler)

# 测试一下,看看是不是两边都有输出
logging.debug('这是一条DEBUG日志,文件和屏幕都会显示')
logging.info('INFO级别日志,同样双输出')
logging.warning('警告日志也没问题')

关键说明:

  • 一定要确保basicConfig是第一次被调用,因为Python的logging模块在第一次配置后,后续调用basicConfig不会再修改已有配置。
  • 如果你想先配置屏幕输出,再添加文件Handler也可以,逻辑是一样的:先用basicConfig()(不指定filename)搞定屏幕,然后创建FileHandler添加到根Logger。
  • 两个Handler的日志级别和格式可以独立设置,比如你可以让屏幕只显示WARNING及以上的日志,文件则保留所有DEBUG级别日志,灵活度很高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:59:41