2017-11-21 84 views
7

Jeśli nasza aplikacja internetowa Django zwraca 404, widzimy to w dziennikach:Python Logging: Change "WARN" do "Info"

2017-11-21 12:48:26 django.request.get_response: WARNING Not Found: /foooooo 

chciałbym zmienić tę szczególną linię utworzoną przez GET RESPONSE() od WARN do INFO.

Jak skonfigurować to w Django i Pythonie?

Alternatywnym rozwiązaniem byłoby zignorowanie tej linii, ale preferowane byłoby WARN to INFO.

+0

Jeśli „może rozwiązać ten problem na własną rękę”, to IMO moja odpowiedź zawiera wystarczająco szczegóły, aby przekonać kogoś o tym nastawieniu do właściwej ścieżki. –

Odpowiedz

10

Nie możesz tego łatwo zrobić, ponieważ twórcy Django zdecydowali, że to wydarzenie jest na tyle ważne, że można je zaklasyfikować jako WARNING.

Jednak może przekształcić go INFO pisząc do dziennika, dodając instancję logging.Filter podklasy, który zmienia poziom w LogRecord z WARNING do INFO lub filtruje wiadomości w ogóle.

Filtr należy dodać do dowolnego programu obsługi, którego wynik należy zmienić w ten sposób. Można to zrobić za pomocą standardowych mechanizmów konfiguracji logowania Django.

+0

Myślę, że mogę rozwiązać to na własną rękę. Z drugiej strony myślę, że 10 programistów zrobiłoby to na 10 różnych sposobów. Jaki jest najbardziej pytonowy sposób? – guettli

3

pierwsze utworzyć filtr rejestratora

def change_404_level_to_INFO(record): 
    if record.status_code == 404: 
     record.levelname = 'INFO' 
    return True 

Potem w LOGGING dodać ten filtr i ustawić filtr na rejestratorze

LOGGING = { 
.... 
    'filters': { 
     'change_404_to_INFO': { 
      '()': 'django.utils.log.CallbackFilter', 
      'callback': change_404_to_INFO`, 
     }, 
    }, 
.... 
    'loggers': { 
     'django.request': { 
      'handlers': ['console',], 
      'level': 'DEBUG', 
      'propagate: False, 
      'filters': ['change_404_to_INFO'], 
     }, 
    } 
.... 
}