Логирование ошибок в Django-проекте на боевом сервере


В варианте который я обычно использую, я реализую максимально подробное логирование сбоев в файл на сервере (для подробного анализа ситуации) и оперативные оповещения администраторов по электронной почте.

Прежде всего нам необходимо настроить параметры SMTP-бэкенда, если у вас конечно не используется локальный MTA, для настройки бэкенда внести или измените в файле settings.py следующие параметры (естественно, что вам необходимо их изменить на ваши реальные данные):

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "mail.gita-dev.ru"
EMAIL_PORT = 465
EMAIL_USE_SSL = True
EMAIL_HOST_USER = "reports@gita-dev.ru"
EMAIL_HOST_PASSWORD = "xxxPasswordxxx"

Обратите внимание, что эти параметры являются параметрами по умолчанию для подсистемы работы с электронной почтой в Django.

Для настройки оповещений о сбоях вам достаточно задать два параметра (второй опционально):

ADMINS = [('Chernousov Anton', 'anton@gita-dev.ru')]
SEND_BROKEN_LINK_EMAILS=True

В первом параметре мы задаем список администраторов (сколько угодно), которые будут извещаться о сбоях на сервере, а второй параметр отвечает за логирование 404-х обращений (довольно бесполезная опция, для анализа 404-х лучше использовать лог Nginx).

С оповещениями по электронной почте вам думаю теперь все понятно и можем приступать к дополнительному логированию в текстовый файл. Для реализации этого функционала я добавил в config.py следующие параметры:

LOGGING = {
   'version': 1,
   'disable_existing_loggers': False,
   'handlers': {
       'file': {
           'level': 'DEBUG',
           'class': 'logging.FileHandler',
           'filename': '/var/log/web-portal.log',
       },
       'mail_admins': {
           'level': 'ERROR',
           'class': 'django.utils.log.AdminEmailHandler',
       },       
   },
   'loggers': {
       'django': {
           'handlers': ['file'],
           'level': 'DEBUG',
           'propagate': True,
       },
       'django.request': {
           'handlers': ['mail_admins'],
           'level': 'ERROR',
           'propagate': True,
       },              
   },
}

Для логирования в каталог /var/log/ соответствующий файл необходимо создать и назначить соответствующие права доступа (непревилегированный пользователь туда писать не может).

# touch /var/log/web-portal.log
# chown chernousov:chernousov /var/log/web-portal.log

Более подробно о логировании ошибок вы можете почитать в официальной документации к Django.