Почему утверждения регистрируются в часовом, когда DEBUG = True?

Я нахожусь в процессе развертывания часового для обработки наших сообщений об ошибках django. Я настроил параметры LOGGING django так, чтобы они регистрировались только тогда, когда DEBUG = False с использованием 'filters': ['require_debug_false'].

Если я вручную зарегистрирую ошибку в представлении django, как в следующем примере, она будет успешно отфильтрована и, следовательно, не будет отправлена ​​в часовой:

import logging
logger = logging.getLogger(__name__)


def view_name(request):
    logger.error('An error message')
    ...

Однако, если я использую оператор assert, как в следующем примере, он не фильтруется и отправляется в часовой:

import logging
logger = logging.getLogger(__name__)


def view_name(request):
    assert False, 'An error message'
    ...

Также стоит отметить, что оператор assert не отправляется обработчику mail_admins, который также использует тот же фильтр.

Может кто-нибудь, пожалуйста, помогите мне предотвратить отправку ошибок assert в часовую во время DEBUG = True?

Вот версии пакетов, которые я использую:

Django==1.6.7
raven==5.1.1

И вот соответствующие части моего settings.py:

DEBUG = True
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'formatters': {
        'simple': {
            'format': '%(levelname)s %(asctime)s %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'WARNING',
            'filters': ['require_debug_false'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler',
            'include_html': True,
        },
        'sentry': {
            'level': 'WARNING',
            'filters': ['require_debug_false'],
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
        },
    },
    'loggers': {
        '': {
            'handlers': ['console', 'mail_admins', 'sentry'],
            'level': 'WARNING',
            'propagate': False,
        },
    },
}

person Adam J. Forster    schedule 04.11.2014    source источник


Ответы (1)


В raven-python 3.0.0 DEBUG настройка в Django больше не отключает Raven.
Из документации:

Raven установит в Django хук, который будет автоматически сообщать о неперехваченных исключениях.

В вашем случае assert генерируется uncaught exceptions AssertionError, которая регистрируется в Sentry.

Чтобы отключить эту функцию, установите dsn = None или удалите dsn (источник):

 RAVEN_CONFIG = {
    'dsn': None
 }       
person Patrick Z    schedule 27.08.2015