django - 当 DEBUG = True 时,为什么断言会记录在 Sentry 中?

标签 django sentry raven

我正在部署 Sentry 来处理我们的 django 错误消息。我已将 django 的 LOGGING 设置配置为仅在 DEBUG = False 时通过使用 'filters': ['require_debug_false'] 进行记录。

如果我在 django View 中手动记录错误,如下例所示,它会被成功过滤,因此不会发送到 Sentry :

import logging
logger = logging.getLogger(__name__)


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

但是,如果我使用 assert 语句(如下例所示),它不会被过滤,并且会被发送到 Sentry :

import logging
logger = logging.getLogger(__name__)


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

还值得注意的是,assert 语句不会发送到 mail_admins 处理程序,该处理程序也使用相同的过滤器。

有人可以帮助我防止在 DEBUG = True 时开始向 Sentry 发送 assert 错误吗?

以下是我正在使用的软件包版本:

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

最佳答案

在 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

在您的情况下,assert生成未捕获的异常AssertionError,该异常记录在Sentry中。

要禁用此功能,请设置 dsn = None 或删除 dsn ( source ):

 RAVEN_CONFIG = {
    'dsn': None
 }       

关于django - 当 DEBUG = True 时,为什么断言会记录在 Sentry 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26740661/

相关文章:

java - 使用额外信息登录 Android 中的 Sentry

python - Raven/Sentry 日志记录本身导致最大递归深度达到错误

python - Django:OAuth token 存储和更新

python - 在django中使用正则表达式按指定字段排序查询集

python - Sentry中使用captureMessage时,如何选择不归类为error的类型?

python - 如何在 Pyramid 中为友好的错误页面配置异常 View ,但仍将错误传递给记录器?

python - 我可以在 Google App Engine 上使用 Django 模板标签吗?

javascript - 如何在现有的 django 网站上开始使用 React

java - 如何使用 Sentry 优雅地处理错误尖峰?

django - 当根记录器配置为使用 raven 时,Celery 定期任务不会运行