Я изо всех сил пытаюсь сделать логгер 'django.request' w ork, как рекламируется - 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, ни один из обработчиков не вызывается. My 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, конфигурация промежуточного программного обеспечения не изменилась. Есть ли какой-то скрытый параметр конфигурации, который мне нужно включить, чтобы эта работа работала, как указано в документации?
Спасибо, Мэтт.