Nie widzę dzienników Django na Heroku

14

Nie widzę wpisów dziennika (na poziomie INFO) wykonanych przez Django w moich dziennikach Heroku.

Oto moja konfiguracja:

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'],
        },
    }
}

Chciałbym zobaczyć wpisy dziennika w interfejsie Heroku. Wiesz, dlaczego ich tam nie widzę?

Ram Rachum
źródło
Widzisz coś, jeśli tylko printcoś chcesz stdout?
anatoly techtonik
Minęły
3
Odkryłem, że wciąż nie ma odpowiedzi. =)
anatolij techtonik 10.10.16
1
@RamRachum Jeśli zostanie rozwiązany, napisz odpowiedź lub zamknij ją w jakiś sposób - w przeciwnym razie będzie nadal pojawiał się na radarach ludzi.
Mike Fiedler,

Odpowiedzi:

1

W aplikacji uruchamiającej Pythona dla dziennika, który nie jest oznaczony django, ERRORdzienniki poziomu są wyświetlane w herokudziennikach, ale INFOdzienniki nie.

Aby działał w przypadku dzienników, które nie są oznaczone django, potrzebuje konfiguracji podobnej do poniższej (podobnej do twojej):

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

Więc jeśli dostosujesz swoją konfigurację tak, aby wyglądała jak rozpoczęcie pracy z Pythonem, w tym plik Procfile, powinna mieć nadzieję, że zadziała.

Oto dziennik, który nie jest oznaczony jako django, który dodałem do 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')

Kiedy po raz pierwszy spróbowałem, pojawił się tylko dziennik błędów. Kiedy dodałem konfigurację rejestrowania we fragmencie kodu powyżej poprzedniego, pojawiły się informacje i dzienniki błędów. To wszystko z DEBUG = False(zmienione z kodu w repozytorium, który ma DEBUG = True).

Prawdopodobnie lepiej jest mieć niż pusty klucz ciągu, więc wszystko jest rejestrowane, aby mieć bardziej szczegółowe loggerswpisy niż tylko pusty ciąg ( '').

Wreszcie, w twoim pliku dziennika jest przypadek, w którym dzienniki INFO nie pojawią się na konsoli lub dzienniki Heroku: Jeśli jest to dziennik INFO do django.request, z twoją konfiguracją pójdzie tylko 'mail_admins'dlatego, że propagatejest False. Myślę, że w tym przypadku, to więcej sensu dla propagatezostać ustawiony True.

Benjamin Atkin
źródło