为什么 logging 日志会重复打印?
在Python中,logging模块是一个非常方便的工具,用来记录程序运行时的信息,例如错误、警告、信息等。但是,有时候我们会发现 logging 日志会出现重复打印的情况,这可能让我们感到困惑。那么,究竟是什么原因导致 logging 日志重复打印呢?
1. 多次添加 Handler
一个常见的原因是多次给 logger 添加了相同的 Handler。当我们在不同的地方重复添加同一个 Handler 时,会导致同样的日志信息被多次处理,从而产生重复打印的现象。
import logging
# 创建一个logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# 创建一个Handler,输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# 添加Handler到logger
logger.addHandler(console_handler)
logger.addHandler(console_handler) # 重复添加
# 输出日志信息
logger.debug('Debug message')
logger.info('Info message')
2. 多次调用 basicConfig
另一个常见的原因是多次调用 logging.basicConfig() 方法。当我们多次调用 basicConfig() 方法时,会导致 root logger 被重复配置,进而引起重复打印日志的问题。
import logging
# 第一次调用 basicConfig
logging.basicConfig(level=logging.DEBUG)
# 第二次调用 basicConfig
logging.basicConfig(level=logging.DEBUG) # 重复调用
# 输出日志信息
logging.debug('Debug message')
logging.info('Info message')
总结
要避免 logging 日志重复打印的问题,我们需要注意以下几点:
- 确保每个 Handler 只被添加一次到 logger 中。
- 确保只调用一次 basicConfig() 方法进行根 logger 的配置。
通过注意以上两点,我们就可以有效地避免 logging 日志重复打印的情况,确保日志信息的准确记录和展示。
journey
title Logging 日志重复打印
section 发现问题
开始 --> 问题发现 --> 原因分析
section 解决方法
原因分析 --> 方法总结 --> 结束
pie
title 日志重复打印原因分布
"多次添加 Handler" : 50
"多次调用 basicConfig" : 50
希望本文能够帮助您理解 logging 日志重复打印的原因,并学会如何避免这一问题。记得在编写代码时注意遵循最佳实践,合理配置 logging,以便更好地管理和记录日志信息。如果您有更多关于 logging 的疑问或问题,欢迎继续探索和学习!
















