Вопрос о том, почему предлагаемая настройка Sentry LOGGING работает - PullRequest
0 голосов
/ 16 марта 2019

В документации 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 гласит: «Чтобы захватить больше, чем ОШИБКА, измените на ПРЕДУПРЕЖДЕНИЕ, ИНФО и т. Д.». Зачем менять это значение на INFO обрабатывать INFO ошибки уровня? Регистратор root установил WARNING как самый низкий уровень, и как любой обработчик может отправить ошибку уровня INFO в обработчик sentry?

Например, если я нахожусь внутри файла типа accounts/models.py, и я звоню

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

Это должно создать регистратор с именем accounts.models, который должен наследоваться от регистратора root. документы говорят, что:

Когда сообщение отправляется регистратору, уровень журнала сообщения сравнивается с уровнем журнала регистратора. Если уровень журнала сообщения соответствует или превышает уровень журнала самого регистратора, сообщение подвергнется дальнейшей обработке. Если этого не произойдет, сообщение будет проигнорировано.

Зачем LOGGER.info('test') отправлять что-либо в Sentry в этом случае, если LOGGER наследует от регистратора root, который игнорирует все на уровне ниже WARNING?

...