Configuring root logger in python

2019-06-15 09:56发布

I have the following logging configuration in in my Django settings.

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

With this configuration I expect my 'apps' to log at DEBUG level and any other modules to log only ERROR and above. But I see DEBUG messages from other modules. How do I fix it?

2条回答
Ridiculous、
2楼-- · 2019-06-15 10:40

I had a similar issue, with root logger configured a level at INFO but seeing DEBUG log message.

Turns out I should not set 'propagate': True for my other logger which is at level DEBUG, since that those logs will be passed to the root logger no matter what level root at.

So my guess here to the original question is that there might be some other modules' logger with propagate turned on. set disable_existing_loggers to True maybe solve this.

查看更多
甜甜的少女心
3楼-- · 2019-06-15 10:48

Are you using an empty string key in LOGGING['loggers'] to match the root logger? If so, you could try this instead.

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'
    }
}
查看更多
登录 后发表回答