为什么 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 日志重复打印的问题,我们需要注意以下几点:

  1. 确保每个 Handler 只被添加一次到 logger 中。
  2. 确保只调用一次 basicConfig() 方法进行根 logger 的配置。

通过注意以上两点,我们就可以有效地避免 logging 日志重复打印的情况,确保日志信息的准确记录和展示。

journey
    title Logging 日志重复打印
    section 发现问题
        开始 --> 问题发现 --> 原因分析
    section 解决方法
        原因分析 --> 方法总结 --> 结束
pie
    title 日志重复打印原因分布
    "多次添加 Handler" : 50
    "多次调用 basicConfig" : 50

希望本文能够帮助您理解 logging 日志重复打印的原因,并学会如何避免这一问题。记得在编写代码时注意遵循最佳实践,合理配置 logging,以便更好地管理和记录日志信息。如果您有更多关于 logging 的疑问或问题,欢迎继续探索和学习!