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

时间:2011-06-10 10:32:07

标签: 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,
        },
    }
}

处理程序本身:

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

如果我自己在记录器上调用.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")

其他一切都是项目的默认; DEBUG是True,中间件配置不变。是否有一些隐藏的配置选项,我需要启用这个工作,就像在文档中说的那样?

谢谢, 太

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

仅供测试:

manage.py runserver --insecure