如何使用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
相关产品推荐
相关产品推荐

