Подтвердить что ты не робот

Запись в Django 1.3: 500 ошибок не регистрируются

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

Спасибо, Матф.

4b9b3361

Ответ 1

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

Ответ 2

Просто для тестирования:

manage.py runserver --insecure