В 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,
},
...
},