Регистрация в Django 1.3: 500 ошибок не зарегистрированы - PullRequest
11 голосов
/ 10 июня 2011

Я изо всех сил стараюсь, чтобы регистратор 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 ]

7 голосов
/ 10 июня 2011

Попробуйте с DEBUG, установленным на False.Когда отладка включена, обработчики ошибок в вашем settings.py переопределяются.

1 голос
/ 02 августа 2012

Только для тестирования:

manage.py runserver --insecure
...