Django 1.3日志记录:不记录500个错误

Mat*_*att 12 django logging django-1.3

我正在努力使'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,
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

处理程序本身:

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

如果我自己在记录器上调用.error(),一切正常.但是当视图生成500时,不会调用任何处理程序.我的views.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")
Run Code Online (Sandbox Code Playgroud)

其他一切都是项目的默认; DEBUG是True,中间件配置不变.是否有一些隐藏的配置选项,我需要启用此工作,如在文档中所述?

谢谢,马特.

Ste*_*yne 8

尝试DEBUG设置为False.启用调试时,您的settings.py覆盖中的错误处理程序将被覆盖.