Не бачачи журналів Джанго на Heroku


14

Я не бачу записів журналів (на рівні INFO), зроблених Джанго в моїх журналах 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?
anatoly techtonik

Минуло два роки;)
Рам Рахум

3
Я виявив, що це все ще без відповіді. =)
anatoly techtonik

1
@RamRachum Якщо це вирішено, напишіть відповідь або закрийте його якось - інакше він продовжуватиме з'являтися на радарах людей.
Майк Фідлер

Відповіді:


1

У програмі python-start- 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',
        },
    },
}

Отже, якщо ви налаштуєте свою конфігурацію, щоб інакше нагадувати пітон-початок, включаючи Procfile, він, сподіваємось, спрацює.

Ось журнал, який не позначається джанго, який я додав до 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.