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?

15voto

sorin Punkte 147675

Lassen Sie mich den Abschnitt der Dokumentation kopieren/einfügen, den ich vor ein oder zwei Wochen geschrieben habe, nachdem ich ein ähnliches Problem wie Sie hatte:

import requests
import logging

# these two lines enable debugging at httplib level (requests->urllib3->httplib)
# you will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# the only thing missing will be the response.body which is not logged.
import httplib
httplib.HTTPConnection.debuglevel = 1

logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from requests
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

requests.get('http://httpbin.org/headers')

8voto

Mikko Punkte 1797

Einstellung des Loggernamens als requests o requests.urllib3 hat bei mir nicht funktioniert. Ich musste den genauen Loggernamen angeben, um die Protokollierungsstufe zu ändern.

Sehen Sie zunächst nach, welche Logger Sie definiert haben, um zu sehen, welche Sie entfernen möchten

print(logging.Logger.manager.loggerDict)

Sie werden dann etwa 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 den Pegel für den genauen Logger:

   'loggers': {
    '': {
        'handlers': ['default'],
        'level': 'DEBUG',
        'propagate': True
    },
    'urllib3.connectionpool': {
        'handlers': ['default'],
        'level': 'WARNING',
        'propagate' : False
    },

6voto

Sank Punkte 121

Wenn Sie eine Konfigurationsdatei haben, können Sie sie konfigurieren.

Hinzufügen von urllib3 im Abschnitt Logger:

[loggers]
keys = root, urllib3

Abschnitt logger_urllib3 hinzufügen:

[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool

4voto

Geoffrey Ritchey Punkte 159

Diese Antwort finden Sie hier: Python: wie man Logging-Anweisungen von Drittanbieter-Bibliotheken unterdrücken?

Sie können die Standardprotokollierungsebene für basicConfig beibehalten und dann die DEBUG-Ebene festlegen, wenn Sie den Logger für Ihr Modul erhalten.

logging.basicConfig(format='%(asctime)s %(module)s %(filename)s:%(lineno)s - %(message)s')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

logger.debug("my debug message")

0voto

newlog Punkte 1022

Ich bin mir nicht sicher, ob die vorherigen Ansätze nicht mehr funktionieren, aber auf jeden Fall gibt es eine weitere Möglichkeit, die Warnungen zu entfernen:

PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py

Im Grunde wird eine Umgebungsvariable im Kontext der Skriptausführung hinzugefügt.

Aus der Dokumentation: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings

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