Pytanie Django: jak ustawić poziom rejestrowania na INFO lub DEBUG


Próbowałem zmienić poziom debugowania na DEBUG w Django, ponieważ chcę dodać kilka komunikatów debugowania do mojego kodu. Wydaje się, że nie ma to żadnego wpływu.

Moja konfiguracja logowania:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
            'formatter': 'simple'
        },
    },
    'loggers': {
        'django.request':{
            'handlers': ['console'],
            'propagate': False,
            'level': 'DEBUG',
        },
    },
}

Kod:

import logging ; logger = logging.getLogger(__name__)
logger.debug("THIS MESSAGE IS NOT SHOWN IN THE LOGS")
logger.warn("THIS ONE IS")

Wyjście na konsoli:

WARNING:core.handlers:THIS ONE IS

Próbowałem również ustawienie DEBUG = False i DEBUG = True w moim pliku ustawień. Jakieś pomysły?

Edytować: Jeśli ustawię poziom dziennika bezpośrednio w rejestratorze, działa:

import logging ; logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.debug("THIS MESSAGE IS NOT SHOWN IN THE LOGS")

Wydajność:

DEBUG:core.handlers:THIS MESSAGE IS NOT SHOWN IN THE LOGS
WARNING:core.handlers:THIS ONE IS

Ale: Wygląda na to, że plik konfiguracyjny jest całkowicie ignorowany. Drukuje obie instrukcje zawsze nawet jeśli ustawię obie pozycje w konfiguracji z powrotem na ERROR. Czy to jest prawidłowe zachowanie, czy nadal czegoś brakuje?


11
2017-11-01 04:26


pochodzenie


Szybkie sprawdzenie: logger.warn("Log level is set to {0}".format(logging.getLevelName(logger.level))) - Christian Ternus
OSTRZEŻENIE: core.handlers: poziom rejestrowania jest ustawiony na NOTSET. Więc to jest poziom domyślny, którym jest OSTRZEŻENIE, prawda? Dlaczego Django nie zmienia tego ustawienia zgodnie z moimi ustawieniami? - kev
migać Huh. Nie mam niczego. Wydaje mi się, że robisz wszystko dobrze. - Christian Ternus
Zaktualizowałem swoją odpowiedź w odpowiedzi na Twój komentarz. - Vinay Sajip


Odpowiedzi:


Musisz dodać np.

'core.handlers': {
    'level': 'DEBUG',
    'handlers': ['console']
}

równolegle z django.request wpis, lub

'root': {
    'level': 'DEBUG',
    'handlers': ['console']
}

równolegle z wpisem "rejestratory". Zapewni to, że poziom jest ustawiony na rejestratorze, którego faktycznie używasz, a nie tylko na django.request rejestrator.

Aktualizacja: Aby wyświetlać wiadomości dla wszystkich modułów, po prostu dodaj wpisy obok django.request włączyć moduły najwyższego poziomu, np. api, handlers, core lub cokolwiek. Ponieważ nie powiedziałeś dokładnie, co to jest hierarchia pakietu / modułu, nie mogę być bardziej konkretny.


9
2017-11-01 08:52



To działa. Ale czy istnieje sposób na pokazanie tylko MOICH dzienników debugowania? Jeśli ustawię wpis "root" otrzymuję wszystkie zapytania sql w logowaniu, które mnie nie interesują. Ustawienie core.handlers ogranicza wyjście debugowania do core.handlers. Ale chciałbym zobaczyć wszystkie dane wyjściowe debugowania w moich plikach (wszystkie programy obsługi.py, api.py i co jeszcze mam). - kev
@kev znalazłeś rozwiązanie? :) - DataGreed
Raczej. Stworzyłem niestandardowy rejestrator plików, jak tutaj: pastebin.com/srT4mSdu, importuj rejestrator logowania = loguj.getLogger ("niestandardowy") logger.setLevel (logging.DEBUG) - kev


Naprawiłem to, zmieniając

LOGGING = {
    ...
}

do:

logging.config.dictConfig({
    ...
})

Na przykład, aby logować wszystkie wiadomości do konsoli:

import logging.config
LOGGING_CONFIG = None
logging.config.dictConfig({
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'console': {
            # exact format is not important, this is the minimum information
            'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'console',
        },
    },
    'loggers': {
    # root logger
        '': {
            'level': 'DEBUG',
            'handlers': ['console'],
        },
    },
})

0
2018-05-01 21:29