Назад | Перейти на главную страницу

Не отображаются журналы Django на Heroku

Я не вижу записей журнала (на уровне INFO) сделанный Django в моих журналах Heroku.

Это моя конфигурация:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
        'not_development_filter': {
            '()': NotDevelopmentFilter,
        },
    },
    'handlers': {
        'console':{
            'level': 'INFO',
            'class': 'logging.StreamHandler',
        },
        'null': {
            'class': 'django.utils.log.NullHandler',
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['not_development_filter'],
            'class': 'django.utils.log.AdminEmailHandler',
            'include_html': True,
        }
    },
    'loggers': {
        '': {
            'handlers': ['mail_admins', 'console'],
            'level': 'INFO',
        },
        'django': {
            'handlers': ['console'],
        },
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,
        },
        'py.warnings': {
            'handlers': ['console'],
        },
    }
}

Я хотел бы видеть записи журнала в интерфейсе Heroku. Есть идеи, почему я их там не вижу?

в python-начало работы app, для журнала без тегов django, ERROR журналы уровня отображаются в heroku журналы, но INFO журналы нет.

Чтобы это работало для журналов без тегов django, ему нужна следующая конфигурация (похожая на вашу):

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        '': {
            'handlers': ['console'],
            'level': 'INFO',
        },
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}

Поэтому, если вы измените свою конфигурацию так, чтобы в противном случае она была похожа на начало работы с python, включая Procfile, мы надеемся, что она сработает.

Вот журнал без тега django, который я добавил в views/hello.py:

import logging
logger = logging.getLogger(__name__)

# Create your views here.
def index(request):
    logger.error('testing logging!')
    logger.info('testing info logging')
    logger.debug('testing debug logging')

    # return HttpResponse('Hello from Python!')
    return render(request, 'index.html')

Когда я впервые попробовал, появился только журнал ошибок. Когда я добавил конфигурацию ведения журнала в фрагмент кода над предыдущим, появилась информация и журналы ошибок. Это все с DEBUG = False (изменено из кода в репо, в котором DEBUG = True).

Вероятно, лучше иметь ключ пустой строки, чтобы все регистрировалось, чтобы иметь более конкретный loggers записи, чем просто пустая строка ('').

Наконец, в вашем файле журнала есть случай, когда журналы INFO не отображаются на консоли, или журналы Heroku: если это журнал INFO для django.request, с вашей конфигурацией он пойдет только в 'mail_admins' так как propagate является False. Я думаю, что в этом случае было бы больше смысла propagate быть установлен на True.

У меня было то же самое что INFO уровень не отображается, но в моем случае (и, как сообщает @Benjamin Atkin) ERROR сделал.

Основная проблема заключается в том, что этот вызов:

django_heroku.settings(locals())

удаляет любые пользовательские регистраторы, которые вы могли настроить в своем LOGGING дикт.

Решение состоит в том, чтобы добавить это к вызову, чтобы он не мешал вашей настройке ведения журнала:

django_heroku.settings(locals(), logging=False)

Или, еще лучше, не используйте его вообще, поскольку этот пакет в любом случае устарел.