有关为何建议的Sentry LOGGING设置起作用的问题

时间:2019-03-16 20:17:46

标签: python django sentry django-logging python-logging

Sentry documentation中,建议对LOGGING进行以下设置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'root': {
        'level': 'WARNING',
        'handlers': ['sentry'],
    },
    'formatters': {
        'verbose': {
            'format': '%(levelname)s  %(asctime)s  %(module)s '
                      '%(process)d  %(thread)d  %(message)s'
        },
    },
    'handlers': {
        'sentry': {
            'level': 'ERROR', # To capture more than ERROR, change to WARNING, INFO, etc.
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
            'tags': {'custom-tag': 'x'},
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'ERROR',
            'handlers': ['console'],
            'propagate': False,
        },
        'raven': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
        'sentry.errors': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
    },
}

所有三个记录器都选择console作为其处理程序。 Sentry为什么会处理任何日志?这是因为所有三个记录器都从root记录器继承而来,所以将console设置为处理程序 adds 控制台到现有的哨兵记录器?还是其他?

然后,在sentry处理程序上的注释指出“要捕获更多错误,请更改为WARNING,INFO等。”为什么将其更改为INFO会处理INFO级错误? root记录器已将WARNING设置为最低级别,那么任何处理程序将如何向INFO处理程序发送sentry级错误?

例如,如果我位于accounts/models.py之类的文件中,并且我打电话

LOGGER = logging.getLogger(__name__)
LOGGER.info('test')

这将创建一个名为accounts.models的记录器,该记录器应继承自root记录器。 docs说:

  

将消息发送给记录器时,会将消息的日志级别与记录器的日志级别进行比较。如果消息的日志级别达到或超过记录器本身的日志级别,则将对消息进行进一步处理。如果没有,则该消息将被忽略。

如果LOGGER.info('test')继承自LOGGER记录器而忽略了root以下级别的所有内容,为什么WARNING会向Sentry发送任何内容?

0 个答案:

没有答案