Domyślnie Wnioski python library pisze komunikaty dziennika do konsoli, wzdłuż linii:
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
Zazwyczaj nie jestem zainteresowany tymi wiadomościami i chciałbym je wyłączyć. Jaki byłby najlepszy sposób wyciszenia tych wiadomości lub zmniejszenia szczegółowości żądań?
python
logging
python-requests
verbosity
aknuds1
źródło
źródło
Odpowiedzi:
Dowiedziałem się, jak skonfigurować poziom rejestrowania żądań , odbywa się to za pośrednictwem standardowego modułu rejestrowania . Zdecydowałem się tak skonfigurować, aby nie rejestrował wiadomości, chyba że są to przynajmniej ostrzeżenia:
Jeśli chcesz zastosować to ustawienie również do biblioteki urllib3 (zwykle używanej w żądaniach), dodaj:
źródło
pysimplesoap
i ta odpowiedź pomaga mi uratować mój dzieńgetLogger("urllib3")
aby ukryć wiadomości.Jeśli przyszedłeś tutaj, aby znaleźć sposób na zmodyfikowanie rejestrowania dowolnego (prawdopodobnie głęboko zagnieżdżonego) modułu, użyj,
logging.Logger.manager.loggerDict
aby uzyskać słownik wszystkich obiektów rejestrujących. Zwrócone nazwy można następnie wykorzystać jako argument dologging.getLogger
:Na użytkownika 136036 w komentarzu należy pamiętać, że ta metoda pokazuje tylko programy rejestrujące, które istnieją w momencie uruchomienia powyższego fragmentu. Jeśli na przykład moduł tworzy nowy program rejestrujący podczas tworzenia instancji klasy, to po utworzeniu klasy należy umieścić ten fragment kodu, aby wydrukować jego nazwę.
źródło
urllib3
komunikaty dziennika podczas używaniaboto3
. Logger w takim przypadku jestbotocore.vendored.requests.packages.urllib3
, więc użyłem tego:logging.getLogger("botocore.vendored.requests.packages.urllib3").setLevel(logging.WARNING)
i w końcu pozbyłem się wiadomości.APScheduler
podczas wywołaniaBackgroundScheduler.BackgroundScheduler()
.W ten sposób wszystkie komunikaty o poziomie = informacje z urllib3 nie będzie obecny w pliku dziennika.
Możesz więc nadal używać poziomu = INFO do wiadomości w dzienniku ... po prostu zmodyfikuj to dla używanej biblioteki.
źródło
setLevel(logging.WARNING)
do rejestrowania również możliwych komunikatów ostrzegawczych i błędów.Pozwól mi skopiować / wkleić sekcję dokumentacji, o której napisałem tydzień lub dwa lata temu, po wystąpieniu problemu podobnego do twojego:
źródło
Dla każdego, kto używa
logging.config.dictConfig
, możesz zmienić poziom dziennika bibliotek żądań w słowniku w następujący sposób:źródło
dictConfig
pod maską.Ustawienie nazwy rejestratora jako
requests
lubrequests.urllib3
nie działało dla mnie. Musiałem podać dokładną nazwę rejestratora, aby zmienić poziom rejestrowania.Najpierw Sprawdź, które loggery zdefiniowałeś, aby zobaczyć, które chcesz usunąć
I zobaczysz coś takiego:
{...'urllib3.poolmanager': <logging.Logger object at 0x1070a6e10>, 'django.request': <logging.Logger object at 0x106d61290>, 'django.template': <logging.Logger object at 0x10630dcd0>, 'django.server': <logging.Logger object at 0x106dd6a50>, 'urllib3.connection': <logging.Logger object at 0x10710a350>,'urllib3.connectionpool': <logging.Logger object at 0x106e09690> ...}
Następnie skonfiguruj poziom dokładnego rejestratora:
źródło
Jeśli masz plik konfiguracyjny, możesz go skonfigurować.
Dodaj urllib3 w sekcji rejestratorów:
Dodaj sekcję logger_urllib3:
źródło
Oto odpowiedź: Python: jak ukryć instrukcje rejestrowania z bibliotek stron trzecich?
Możesz pozostawić domyślny poziom rejestrowania dla basicConfig, a następnie ustaw poziom DEBUG, kiedy otrzymasz moduł rejestrujący dla swojego modułu.
źródło
źródło
Wskazówki Kbrose dotyczące znalezienia rejestratora, który generował komunikaty dziennika, były niezwykle przydatne. W przypadku mojego projektu Django musiałem posortować 120 różnych programów rejestrujących, dopóki nie odkryłem,
elasticsearch
że przyczyną problemów była biblioteka Python. Zgodnie z wytycznymi w większości pytań, wyłączyłem go, dodając to do moich rejestratorów:Publikowanie tutaj, na wypadek, gdyby ktoś zobaczył niepomocne komunikaty w dzienniku za każdym razem, gdy uruchomi zapytanie Elasticsearch.
źródło
proste: wystarczy dodać
requests.packages.urllib3.disable_warnings()
poimport requests
źródło
INFO
.Nie jestem pewien, czy poprzednie podejścia przestały działać, ale w każdym razie oto inny sposób usunięcia ostrzeżeń:
Zasadniczo dodanie zmiennej środowiskowej w kontekście wykonywania skryptu.
Z dokumentacji: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings
źródło