3

我正在部署哨兵来处理我们的 django 错误消息。我已将 django 的LOGGING设置配置为仅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,
        },
    },
}
4

1 回答 1

3

在 Django 中的 raven-python 3.0.0DEBUG设置中不再禁用 Raven
从文档

Raven 在 Django 中安装一个钩子,它会自动报告未捕获的异常

在您的情况下,assert生成登录 Sentry 的uncaught exceptions AssertionError 。

要禁用此功能集dsn = None或删除 dsn ( source ):

 RAVEN_CONFIG = {
    'dsn': None
 }       
于 2015-08-27T13:20:55.330 回答