在 python 中配置根记录器

Posted

技术标签:

【中文标题】在 python 中配置根记录器【英文标题】:Configuring root logger in 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 消息。我该如何解决?

【问题讨论】:

【参考方案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 或许可以解决这个问题。

【讨论】:

以上是关于在 python 中配置根记录器的主要内容,如果未能解决你的问题,请参考以下文章

确定根记录器是不是在 Python 中设置为 DEBUG 级别?

Django 中的 Python 日志记录

当配置 org.hibernate.SQL 记录器时,Logback 显示带有根级别 INFO 的 DEBUG 输出

根文件系统熟悉根文件系统构建过程记录

busybox根文件系统使用记录

从自引用表中获取“根记录”