Ведение журнала в Django не работает, несмотря на правильные настройки
Проблема и предпосылки
Здравствуйте, у меня есть проект Django, использующий Django 2.2.28 и python 3.5.2.
Живой сайт работает нормально, за исключением одной функции, которую я пытаюсь отладить.
Я использовал ведение журнала раньше, но по какой-то причине сейчас он не работает.
Вот мой код...
production_settings.py
Я вызываю этот файл в wsgi.py. Все настройки работают как надо, но LOGGING
не работает.
from .settings import *
DEBUG = False
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/home/myuser/proj_container/debug.log',
},
},
'loggers': {
'django.request': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': False,
},
},
}
views.py
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
def some_func(request):
...
if some_condition:
logger.debug('In some_condition block')
elif some_other_condition:
logger.debug('In some_other_condition block')
Что я пробовал
Я попробовал вышеуказанное с настройками, указанными в
production_settings.py
... Ничего не отображается.То же самое, что и 1, но с импортом
logging
и вызовом в каждом важном блоке кода.Я прочитал документацию по
logger.debug()
, а также этот ответ , который я реализовал выше, как вы можете видеть.Я также перечитал документацию по логированию в Django.
Я переместил
LOGGING
изproduction_settings.py
вsettings.py
... Вчера я исправил ошибку, когда django не переопределял переменнуюDATABASES
вsettings.py
изproduction_settings.py
, а вместо этого создавал базу данных sqlite3 и выдавал ошибкиsettings.py
, и единственным способом исправить это было сделать вот так.Для каждого изменения, которое я сделал выше: Я всегда перезапускал wsgi и сайт (связанную службу unix socket, потому что на этом сервере работает более 1 сайта, и оба сайта работают нормально, за исключением этой проблемы на одном из них). Кэшированные значения для них не конфликтуют, пути к файлам правильные и т.д.
.
Вопрос
Почему это не работает? Что я упускаю?
Раньше это прекрасно работало в других проектах, но я понятия не имею, почему это не происходит сейчас.
Спасибо!
Вот обходной путь. Я проверил и еще раз проверил свой код выше, и не вижу в нем ничего плохого, даже перечитал все страницы относительной документации еще раз, так что это, вероятно, просто ошибка в этой версии.
В общем, вот решение для тех, кто тоже столкнулся с этой проблемой.
Просто убедитесь, что у пользователя Linux есть права на запись в файл по указанному ниже пути.
Views.py
import logging
logging.basicConfig(level=logging.DEBUG, filename='/home/myuser/path/to/debug.log') # will append by default, docs allow other values too.
logger = logging.getLogger(__name__)
def some_func(request):
...
if some_condition:
logger.debug('In some_condition block')
logger.debug('Object type == {}'.format(type(some_condition.attribute['key']['nested_key'])))
logger.debug('\n\n')
# etc
elif some_other_condition:
logger.debug('In some_other_condition block')
settings.py или production_settings.py
# LOGGING = {...} # is not necessary since the above does it fine. Probably just a bug like I mentioned with DATABASES.