【问题标题】:why logger disappears after configuration?为什么配置后记录器消失了?
【发布时间】:2019-12-26 00:54:26
【问题描述】:

使用logging.config.dictConfig() 似乎可以删除或禁用不在配置中的记录器。这让我很困惑。

下面是一个关于最小示例的问题:

为什么配置后 logger1 的输出没有显示? 它不应该像 logger2 那样传播到根记录器吗?

示例:

import logging
import logging.config
import yaml

logger1 = logging.getLogger('logger1')
logger2 = logging.getLogger('logger2')

logger1.error('logger1: this is shown 1')
logger2.error('logger2: this is shown 2')

config_string = """
version: 1
loggers:
  logger2:
      level: ERROR
"""

config_dict = yaml.safe_load(config_string)
logging.config.dictConfig(config_dict)

logger1.error('logger1: why is this not shown 3')
logger2.error('logger2: this is shown 4')

实际输出:

logger1: this is shown 1
logger2: this is shown 2
logger2: this is shown 4

我期望的输出:

logger1: this is shown 1
logger2: this is shown 2
logger1: why is this not shown 3
logger2: this is shown 4

【问题讨论】:

    标签: python logging python-logging


    【解决方案1】:

    找到了。

    事实证明,我们需要在字典中添加disable_existing_loggers: False,就像这样

    config_string = """
    version: 1
    disable_existing_loggers: False
    loggers:
      logger2:
          level: ERROR
    """
    

    这解决了问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多