15

我正在努力让 'django.request' 记录器像宣传的那样工作 - 500 个错误似乎不会传播到附加到它的处理程序。

在每个新项目的默认日志配置中,评论说“此配置执行的日志记录是在每个 HTTP 500 错误时向站点管理员发送电子邮件”。显然,仅当您正确设置了 ADMINS 时才会发送电子邮件,但是当视图引发异常时,我什至没有看到处理程序被调用。

我从一个空项目开始构建了一个测试用例,并将我自己的处理程序添加到“django.request”记录器中:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'my_error_handler' : {
            'level': 'ERROR',
            'class': 'log.MyErrorHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins', 'my_error_handler'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

处理程序本身:

import logging
class MyErrorHandler(logging.Handler):     
    def emit(self, record):
        print "handling error: %s" % record 

如果我自己在记录器上调用 .error() ,则一切正常。但是当视图生成 500 时,不会调用任何处理程序。我的意见.py:

import logging

def home(request):

    #this error will be processed by MyErrorHandler
    logging.getLogger('django.request').error("Custom error message")

    #this won't
    raise Exception('500 error message')

    return HttpResponse("Home")

其他都是项目默认的;DEBUG 为 True,中间件配置不变。我需要启用一些隐藏的配置选项才能像文档中所说的那样进行这项工作吗?

谢谢,马特。

4

2 回答 2

9

尝试使用DEBUGset to False。启用调试后,您的错误处理程序将settings.py被覆盖。

于 2011-06-10T12:03:39.603 回答
1

仅用于测试:

manage.py runserver --insecure
于 2012-08-02T17:11:46.837 回答