2014-11-04 32 views
3

我正在部署哨兵來處理我們的django錯誤消息。我配置了django的LOGGING設置,只有在DEBUG = False通過使用'filters': ['require_debug_false']才能登錄。當DEBUG = True時,爲什麼在哨兵中記錄斷言?

如果我手動記錄錯誤在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, 
     }, 
    }, 
} 

回答