【问题标题】:Configuring root logger in python在 python 中配置根记录器
【发布时间】:2014-01-28 02:11:38
【问题描述】:

我的 Django 设置中有以下日志记录配置。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format':
              '%(levelname)s|%(asctime)s|%(name)s>> %(message)s',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
        }
    },
    'loggers': {
         '': {
            'handlers': ['console'],
            'level': 'ERROR',
            'propagate': True,
         },
        'apps': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    }
}

使用此配置,我希望我的“应用程序”以 DEBUG 级别登录,而任何其他模块仅记录 ERROR 及以上级别。但我看到来自其他模块的 DEBUG 消息。我该如何解决?

【问题讨论】:

    标签: python django logging


    【解决方案1】:

    您是否在LOGGING['loggers'] 中使用空字符串键来匹配根记录器?如果是这样,你可以试试这个。

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'verbose': {
                'format':
                  '%(levelname)s|%(asctime)s|%(name)s>> %(message)s',
            },
        },
        'handlers': {
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'verbose',
            }
        },
        'loggers': {
            'apps': {
                'handlers': ['console'],
                'level': 'DEBUG',
            }
        },
        'root': {
           'handlers': ['console'],
           'level': 'ERROR'
        }
    }
    

    【讨论】:

    • 我试过了,但没有用。仍然看到来自其他模块的 DEBUG 消息。
    • @Chamindu 您是否尝试将'' 更改为'root' 而不是将其移出loggers? (我参加聚会有点晚了,对不起!)
    • 我没试过。这是很久以前的事了,我什至不记得我在哪里尝试这样做:)
    • 我设置了根,它有帮助。但实际上我无法向自己解释为什么必须配置 root ?我的意思是它的目的是什么。
    • 我遇到了相反的问题:使用 'root' 它只显示 WARNING 及以上,而将其设置为空字符串也显示 DEBUG 和 INFO 消息。
    【解决方案2】:

    我遇到了类似的问题,root 记录器在INFO 配置了一个级别,但看到了 DEBUG 日志消息。

    事实证明,我不应该为级别为 DEBUG 的其他记录器设置 'propagate': True,因为无论 root 处于什么级别,这些日志都将传递给根记录器。

    所以我对原始问题的猜测是,可能有一些其他模块的记录器打开了propagate。将disable_existing_loggers 设置为True 或许可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      相关资源
      最近更新 更多