454 Stimmen

Wie kann ich die Protokollmeldungen der Anforderungsbibliothek deaktivieren?

Standardmäßig wird die Anfragen an python library schreibt Log-Meldungen auf die Konsole, etwa in der Art:

Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606

Ich bin normalerweise nicht an diesen Meldungen interessiert und möchte sie daher deaktivieren. Wie kann ich diese Meldungen am besten zum Schweigen bringen oder die Ausführlichkeit von Requests verringern?

727voto

aknuds1 Punkte 61744

Ich habe herausgefunden, wie man die Anfragen Logging-Levels, erfolgt über die Standard Protokollierung Modul. Ich habe beschlossen, es so zu konfigurieren, dass keine Meldungen protokolliert werden, es sei denn, es handelt sich zumindest um Warnungen:

import logging

logging.getLogger("requests").setLevel(logging.WARNING)

Wenn Sie diese Einstellung auch für die urllib3-Bibliothek (die typischerweise von Anfragen verwendet wird) anwenden möchten, fügen Sie Folgendes hinzu:

logging.getLogger("urllib3").setLevel(logging.WARNING)

143voto

kbrose Punkte 1532

Falls Sie auf der Suche nach einer Möglichkeit sind, die Protokollierung eines beliebigen (möglicherweise tief verschachtelten) Moduls zu ändern, verwenden Sie logging.Logger.manager.loggerDict um ein Wörterbuch mit allen Logger-Objekten zu erhalten. Die zurückgegebenen Namen können dann als Argument für logging.getLogger :

import requests
import logging
for key in logging.Logger.manager.loggerDict:
    print(key)
# requests.packages.urllib3.connectionpool
# requests.packages.urllib3.util
# requests.packages
# requests.packages.urllib3
# requests.packages.urllib3.util.retry
# PYREADLINE
# requests
# requests.packages.urllib3.poolmanager

logging.getLogger('requests').setLevel(logging.CRITICAL)
# Could also use the dictionary directly:
# logging.Logger.manager.loggerDict['requests'].setLevel(logging.CRITICAL)

Wie user136036 in einem Kommentar schrieb, zeigt diese Methode nur die Logger an, die zum Zeitpunkt der Ausführung des obigen Snippets vorhanden sind. Wenn zum Beispiel ein Modul einen neuen Logger erstellt, wenn Sie eine Klasse instanziieren, dann müssen Sie dieses Snippet einfügen nach die Klasse zu erstellen, um ihren Namen zu drucken.

32voto

shaolin Punkte 453
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)

Auf diese Weise werden alle Meldungen des Levels=INFO von urllib3 nicht in der Logdatei vorhanden sein.

Sie können also weiterhin level=INFO für Ihre Protokollnachrichten verwenden... Sie müssen dies nur an die von Ihnen verwendete Bibliothek anpassen.

32voto

Martin Thoma Punkte 105621
import logging

# Only show warnings
logging.getLogger("urllib3").setLevel(logging.WARNING)

# Disable all child loggers of urllib3, e.g. urllib3.connectionpool
logging.getLogger("urllib3").propagate = False

20voto

theherk Punkte 5130

Für alle, die logging.config.dictConfig können Sie die Protokollstufe der Anforderungsbibliothek im Wörterbuch wie folgt ändern:

'loggers': {
    '': {
        'handlers': ['file'],
        'level': level,
        'propagate': False
    },
    'requests.packages.urllib3': {
        'handlers': ['file'],
        'level': logging.WARNING
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X