Почему Sentry рекомендует протоколирование молчания конфигурации Django с django.db.backends? - PullRequest
0 голосов
/ 27 февраля 2019

(в настоящее время устаревшая) документация по интеграции Sentry Django рекомендует следующую LOGGING конфигурацию (https://docs.sentry.io/clients/python/integrations/django/):

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

. Мне особенно интересно это определение журнала:

    'django.db.backends': {
        'level': 'ERROR',
        'handlers': ['console'],
        'propagate': False,
    },

Для меня это означает, что записи журнала, происходящие из django.db.backends (и потомков), отправляются только на консоль и не распространяются до корневого регистратора (который настроен на отправку записей журнала >= WARNING в Sentry.

Документация Sentry, по-видимому, даже не подтверждает существование этого регистратора. Эта конфигурация представлена ​​как-только как средство заставить Django войти в Sentry.

  1. Это мое чтение этогоправильно?
  2. Можете ли вы придумать какое-либо оправдание для этого? Похоже, вы хотели бы получить django.db.backends.* >= WARNING записей журнала, отправленных в Sentry.

1 Ответ

0 голосов
/ 27 февраля 2019

django.db.backends содержит журналы для каждого запроса SQL, и это единственное, для чего Django использует его.Насколько мне известно, в этом пространстве имен никогда не регистрировались предупреждения или ошибки.

Мы хотим игнорировать ведение журнальных крошек с django.db.backends, потому что у нас уже есть настраиваемый хук для захвата запросов SQL в Django, такой, что мы можем показатьони отличаются от других хлебных крошек в пользовательском интерфейсе.

Raven выгружает эту логику пользователю, новый SDK sentry_sdk внутренне игнорирует регистратор.Вы можете найти эквивалент здесь: https://github.com/getsentry/sentry-python/blob/fde5576e489dd7926fce7bae7be8399021cdde14/sentry_sdk/integrations/django/init.py#L365

...