Django не регистрирует все ошибки на производстве

Мое приложение Django правильно регистрирует и отправляет ошибки по электронной почте только при Debug=True.

На производстве я получаю только ошибки 'Invalid HTTP_HOST header' как в лог-файле, так и в моем почтовом ящике. Все остальные ошибки не регистрируются в журнале django и не приходят мне по электронной почте.

Я попробовал несколько вещей с этим тестовым запросом:

def test(request):
    logging.debug('debug test message')  // Always appears in log file
    from django.core.mail import mail_admins
    mail_admins('test error', 'test error via call to mail_admins()') // Always arrives in my inbox just fine
    raise Appointment.DoesNotExist  // When Debug=False (both locally and in production), does not appear in log file or in inbox.

Мои настройки протоколирования для локальной и производственной систем:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
        'csv_formatter': {
            'format': '%(levelname)s;%(asctime)s;%(message)s'
        }
    },
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        },
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'maxBytes': 1024 * 1024 * 50,
            'backupCount': 10,
            'formatter': 'csv_formatter',
        },
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'formatter': 'verbose',
        },
    },
    'loggers': {
        '': {
            'handlers': ['default'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'asyncio': {
            'level': 'WARNING',
        },
        'django.request': {
           'handlers': ['mail_admins'],
           'level': 'ERROR',
           'propagate': True,
        },
        'django.security': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

Как сделать так, чтобы все ошибки Django регистрировались и отправлялись в production (когда Debug=False)?

Вот подробное решение, предоставленное Алексом Кузнецовым в его средней статье

Вернуться на верх