Search code examples
djangosentryraven

Why are assertions being logged in sentry when DEBUG = True?


I'm in the middle of deploying sentry to handle our django error messages. I've configured django's LOGGING settings to only log when DEBUG = False via the use of 'filters': ['require_debug_false'].

If I manually log an error in a django view as in the following example, it is successfully filtered and therefore not sent to sentry:

import logging
logger = logging.getLogger(__name__)


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

However, if I use an assert statement as in the following example, it is not filtered and does get sent to sentry:

import logging
logger = logging.getLogger(__name__)


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

It is also worth noting that the assert statement does not get sent to the mail_admins handler, which also uses the same filter.

Can someone please help me prevent assert errors from begin sent to sentry whilst DEBUG = True?

Here are the package versions I am using:

Django==1.6.7
raven==5.1.1

And here are the relevant parts of my 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,
        },
    },
}

Solution

  • In raven-python 3.0.0 DEBUG setting in Django no longer disables Raven.
    From documentation:

    Raven to install a hook in Django that will automatically report uncaught exceptions

    In your case, assert generate uncaught exceptions AssertionError, which logged in Sentry.

    To disable this functionality set dsn = None or remove dsn (source):

     RAVEN_CONFIG = {
        'dsn': None
     }