7 октября 2013 г.

django: логгирование в файл и перехват warnings

В django иногда удобно вести файловые логи в приложении. По умолчанию настроен только один handler — mail_admins (отправка на мыло админам), что не всегда хорошо, а иногда невозможно (в принципиальном интранете, например). Вторая задача возникла — хорошо бы отлавливать туда же и все варнинги из warnings.warn, которые в том числе и django иногда вываливает.
Первая задача тривиальна и описана в документации. Создаём новый handler RotatingFileHandler и добавляем в нужные логгеры (очевидно, что речь про settings.py):
LOGGING = {
...
    'handlers': {
...
        'logfile': {
            'level': 'WARNING',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': rel('log', 'logfile.log'),
            'maxBytes': 1000000,
            'backupCount': 666,
            'formatter': 'standard',
        },
...
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins', 'logfile'],
            'level': 'WARNING',
            'propagate': True,
        },
...
    },
}
вторая задача тоже просто решается. Делается
import logging
logging.captureWarnings(True)
После этого все варнинги начинаются писаться также в логгер с именем "py.warnings", откуда их и логируем:
...
    'loggers': {
...
        'py.warnings': {
            'handlers': ['console', 'logfile'],
            'level': 'WARNING',
            'propagate': True,
        },
...
    },

Комментариев нет:

Отправить комментарий