Не видя, как Джанго входит в Heroku

14

Я не вижу записей журнала (на уровне 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. Есть идеи, почему я их там не вижу?

Рам Рахум
источник
Вы видите что-нибудь, если вы просто printчто-то stdout?
анатолий техтоник
Прошло два года;)
Рам Рахум
3
Я нашел это все еще без ответа. =)
анатолий техтоник
1
@RamRachum Если проблема решена, напишите ответ или закройте его каким-либо образом - в противном случае он продолжит появляться на людских радарах.
Майк Фидлер

Ответы:

1

В приложении python-Getting- Start, для журнала, который не помечен 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.

Бенджамин Аткин
источник