我正在努力使'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,中间件配置不变。是否有一些隐藏的配置选项,我需要启用这个工作,就像在文档中说的那样?
谢谢, 太
答案 0 :(得分:7)
尝试将DEBUG
设置为False
。启用调试后,settings.py
中的错误处理程序将被覆盖。
答案 1 :(得分:1)
仅供测试:
manage.py runserver --insecure