0

Sentry 文档中,建议进行以下设置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为处理程序会将控制台添加到现有的哨兵记录器?或者是其他东西?

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

例如,如果我在一个类似的文件accounts/models.py中,我调用

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

这应该创建一个名为 的记录器accounts.models,它应该从记录器继承root文档说:

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

如果从忽略低于以下级别的所有内容的记录器继承,为什么LOGGER.info('test')在这种情况下会向 Sentry 发送任何内容?LOGGERrootWARNING

4

0 回答 0