Ведение журнала в 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')

Что я пробовал

  1. Я попробовал вышеуказанное с настройками, указанными в production_settings.py... Ничего не отображается.

  2. То же самое, что и 1, но с импортом logging и вызовом в каждом важном блоке кода.

  3. Я прочитал документацию по logger.debug(), а также этот ответ , который я реализовал выше, как вы можете видеть.

  4. Я также перечитал документацию по логированию в Django.

  5. Я переместил LOGGING из production_settings.py в settings.py... Вчера я исправил ошибку, когда django не переопределял переменную DATABASES в settings.py из production_settings.py, а вместо этого создавал базу данных sqlite3 и выдавал ошибки settings.py, и единственным способом исправить это было сделать вот так.

  6. Для каждого изменения, которое я сделал выше: Я всегда перезапускал 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.
Вернуться на верх