Почему Django пропускает записи в журнале?
Это мой модуль настроек:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/django-python/django/testapp/testapp.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
и это мой код в файле представления:
import logging
logger = logging.getLogger(__name__)
logger.info("this is an error message!!")
Я получаю предыдущие журналы из различных модулей, но не указанную выше запись журнала "это сообщение об ошибке".
4 ответа
Ваша конфигурация регистрации регистрирует только журналы в пределах django
Пространство имен.
Эта строка:
logger = logging.getLogger(__name__)
... сообщает регистратору использовать имя вашего модуля в качестве пространства имен для этих журналов ( документов). Если ваш модуль называется mymodule
, затем вы можете поймать эти журналы, добавив что-то вроде этого в вашу конфигурацию журналирования:
'loggers': {
'django' : {...},
'mymodule': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
Вы должны добавить конфигурацию логгера из-за имени вашего приложения - что-то вроде
'your_app_name': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
К настоящему времени вы объявили только logger для сообщений по умолчанию в django (например, системные ошибки)
Обратите внимание, что уровень сообщений журнала важен, поэтому, когда вы используете
logger.info("this is an error message!!")
метод для распечатки сообщения, уровень вашего регистратора должен быть INFO или более строгим
Вы можете добавить регистратор "catch all" в раздел loggers:
'loggers': {
'': {
'handlers': ['file'],
'level': 'DEBUG',
}
}
Он будет перехватывать все сообщения журнала, которые не перехватываются стандартными регистраторами Django.
import logging
logger = logging.getLogger(__name__)
после добавления:
logging.basicConfig(
level = logging.DEBUG,
format = '%(name)s %(levelname)s %(message)s',
)
или просто добавьте settings.py:
import logging
logging.basicConfig(
level = logging.DEBUG,
format = '%(name)s %(levelname)s %(message)s',
)
мы можем изменить формат на:
format = '"%(levelname)s:%(name)s:%(message)s" ',
или же
format = '%(name)s %(asctime)s %(levelname)s %(message)s',