Standardmäßig schreibt die Python-Bibliothek " Requests" Protokollnachrichten wie folgt in die Konsole:
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
Ich bin normalerweise nicht an diesen Nachrichten interessiert und möchte sie deaktivieren. Was wäre der beste Weg, um diese Nachrichten zum Schweigen zu bringen oder die Ausführlichkeit von Anfragen zu verringern?
python
logging
python-requests
verbosity
aknuds1
quelle
quelle
Antworten:
Ich fand heraus , wie man configure Anfragen ‚s Protokollebene, es über den Standard getan Logging - Modul. Ich habe beschlossen, es so zu konfigurieren, dass keine Nachrichten protokolliert werden, es sei denn, es handelt sich zumindest um Warnungen:
Wenn Sie diese Einstellung auch für die urllib3-Bibliothek anwenden möchten (normalerweise von Anforderungen verwendet), fügen Sie Folgendes hinzu:
quelle
pysimplesoap
, und diese Antwort hilft mir, meinen Tag zu rettengetLogger("urllib3")
die Nachrichten unterdrücken.Wenn Sie hierher gekommen sind, um nach einer Möglichkeit zu suchen, die Protokollierung eines (möglicherweise tief verschachtelten) Moduls zu ändern, verwenden Sie
logging.Logger.manager.loggerDict
, um ein Wörterbuch aller Protokollierungsobjekte abzurufen. Die zurückgegebenen Namen können dann als Argument für Folgendes verwendet werdenlogging.getLogger
:Beachten Sie, dass diese Methode gemäß user136036 in einem Kommentar nur die Logger anzeigt, die zum Zeitpunkt der Ausführung des obigen Snippets vorhanden sind. Wenn ein Modul beispielsweise beim Instanziieren einer Klasse einen neuen Logger erstellt, müssen Sie dieses Snippet nach dem Erstellen der Klasse einfügen, um ihren Namen zu drucken.
quelle
urllib3
Protokollnachrichten bei der Verwendung zum Schweigen zu bringenboto3
. Der Logger in einem solchen Fall istbotocore.vendored.requests.packages.urllib3
, also habe ich diesen verwendet:logging.getLogger("botocore.vendored.requests.packages.urllib3").setLevel(logging.WARNING)
und ich habe endlich die Nachrichten losgeworden.APScheduler
dies beim Aufrufen der Fall istBackgroundScheduler.BackgroundScheduler()
.Auf diese Weise sind nicht alle Nachrichten von level = INFO von urllib3 in der Protokolldatei vorhanden.
Sie können also weiterhin level = INFO für Ihre Protokollnachrichten verwenden. Ändern Sie dies einfach für die Bibliothek, die Sie verwenden.
quelle
setLevel(logging.WARNING)
, auch mögliche Warn- und Fehlermeldungen zu protokollieren.Lassen Sie mich den Dokumentationsabschnitt kopieren / einfügen, den ich vor ein oder zwei Wochen geschrieben habe, nachdem ich ein ähnliches Problem wie Sie hatte:
quelle
Für jeden Benutzer können
logging.config.dictConfig
Sie die Protokollstufe der Anforderungsbibliothek im Wörterbuch wie folgt ändern:quelle
dictConfig
unter der Haube.Festlegen des Loggernamens als
requests
oderrequests.urllib3
hat bei mir nicht funktioniert. Ich musste den genauen Loggernamen angeben, um die Protokollierungsstufe zu ändern.Überprüfen Sie zunächst, welche Logger Sie definiert haben, um festzustellen, welche Sie entfernen möchten
Und Sie werden so etwas sehen:
{...'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> ...}
Konfigurieren Sie dann die Ebene für den genauen Logger:
quelle
Wenn Sie eine Konfigurationsdatei haben, können Sie diese konfigurieren.
Fügen Sie urllib3 im Abschnitt Logger hinzu:
Fügen Sie den Abschnitt logger_urllib3 hinzu:
quelle
Diese Antwort ist hier: Python: Wie werden Protokollierungsanweisungen aus Bibliotheken von Drittanbietern unterdrückt?
Sie können die Standardprotokollierungsstufe für basicConfig beibehalten und dann die DEBUG-Stufe festlegen, wenn Sie den Logger für Ihr Modul erhalten.
quelle
quelle
Die Anleitung von Kbrose, herauszufinden, welcher Logger Protokollnachrichten generiert, war äußerst nützlich. Für mein Django-Projekt musste ich 120 verschiedene Logger sortieren, bis ich feststellte, dass es die
elasticsearch
Python-Bibliothek war, die Probleme für mich verursachte. Gemäß den Anweisungen in den meisten Fragen habe ich sie deaktiviert, indem ich sie meinen Loggern hinzugefügt habe:Hier posten, falls jemand anderes die nicht hilfreichen Protokollnachrichten sieht, wenn er eine Elasticsearch-Abfrage ausführt.
quelle
einfach: einfach
requests.packages.urllib3.disable_warnings()
nachher hinzufügenimport requests
quelle
INFO
.Ich bin mir nicht sicher, ob die vorherigen Ansätze nicht mehr funktionieren, aber auf jeden Fall gibt es eine andere Möglichkeit, die Warnungen zu entfernen:
Grundsätzlich Hinzufügen einer Umgebungsvariablen im Kontext der Skriptausführung.
Aus der Dokumentation: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings
quelle