Как регистрировать предупреждения Python в файле журнала Django?

У меня есть приложение Django, которое я переношу с v1.8 на v1.10. В процессе выполнения этой работы я запускал свое приложение через:

python -Wall manage.py runserver

Это приводит к появлению нескольких предупреждений на Python в моей консоли. Я бы хотел, чтобы эти предупреждения отображались в моем журнале приложений Django, поэтому я могу проверить их позже. Я думал, что обработчик журнала моего приложения поймает эти предупреждения, но это не так. Обработчик журнала выглядит следующим образом (как взято из settings.py):

 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s", 'datefmt': "%d/%b/%Y %H:%M:%S" }, 'simple': { 'format': '%(levelname)s %(message)s' }, }, 'handlers': { 'file': { 'level': 'WARNING', 'class': 'logging.FileHandler', 'filename': 'myapp.log', 'formatter': 'verbose' }, }, 'loggers': { 'django': { 'handlers': ['file'], 'propagate': True, 'level': 'WARNING', }, 'myapp': { 'handlers': ['file'], 'level': 'WARNING', }, } } 

Как я могу захватить предупреждения Python (с -Wall ) в моем журнале Django для изучения позже?

Предупреждения, отображаемые в python -Wall manage.py <command> , генерируются с использованием модуля предупреждений. В документации модуля протокола Python2.7 у них есть раздел, показывающий, как интегрировать сообщения из модуля предупреждений в журнал.

Добавьте их в свой файл настроек.

 import logging logging.captureWarnings(True) LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s", 'datefmt': "%d/%b/%Y %H:%M:%S" }, 'simple': { 'format': '%(levelname)s %(message)s' }, }, 'handlers': { 'file': { 'level': 'WARNING', 'class': 'logging.FileHandler', 'filename': 'myapp.log', 'formatter': 'verbose' }, }, 'loggers': { 'django': { 'handlers': ['file'], 'propagate': True, 'level': 'WARNING', }, 'myapp': { 'handlers': ['file'], 'level': 'WARNING', }, 'py.warnings': { 'handlers': ['file'], 'level': 'WARNING', 'propagate': True } } } 

После его добавления попробуйте запустить любую команду manage.py и вы увидите предупреждения, написанные в файле myapp.log .

Эта строка инструктирует вести журнал для записи предупреждений py.warnings:

  logging.captureWarnings(True) 

Это инструктирует вести журнал для маршрутизации (в этом примере к обработчику файла ) предупреждений из журнала py.warnings:

  'py.warnings': { 'handlers': ['file'], 'level': 'WARNING', 'propagate': True }