在python中配置root logger

时间:2014-01-09 13:33:10

标签: python django logging

我在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',
        },
    }
}

通过这种配置,我希望我的'apps'能够以DEBUG级别登录,而任何其他模块只能记录ERROR及以上级别。但我看到来自其他模块的DEBUG消息。我该如何解决?

2 个答案:

答案 0 :(得分:7)

您是否在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'
    }
}

答案 1 :(得分:0)

我遇到了类似的问题,root logger在viewMore(state, status) { console.log('viewMore') const current = state.visibility.statuses[status] state.visibility.statuses[status] = current + 5 state.visibility = JSON.parse(JSON.stringify(state.visibility)) } 上配置了一个级别,但是看到了DEBUG日志消息。

结果是,我不应该为INFO级别的其他记录器设置'propagate': True,因为无论这些记录处于哪个级别,这些日志都将传递到根记录器。

因此,我对原始问题的猜测是,可能存在其他一些打开了DEBUG的模块的记录器。将propagate设置为disable_existing_loggers也许可以解决这个问题。