usar para paquetes librerias libreria instalar descargar como bibliotecas python logging python-requests verbosity

python - para - ¿Cómo deshabilito los mensajes de registro de la biblioteca de solicitudes?



instalar paquetes python windows 10 (9)

Descubrí cómo configurar el nivel de registro de las solicitudes , se realiza a través del módulo de logging estándar. Decidí configurarlo para no registrar mensajes a menos que sean al menos advertencias:

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

Si desea aplicar esta configuración para la biblioteca urllib3 (normalmente utilizada por las solicitudes), agregue lo siguiente:

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

De forma predeterminada, la biblioteca de Python de Requests escribe mensajes de registro en la consola, en la línea de:

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

Normalmente no me interesan estos mensajes y me gustaría inhabilitarlos. ¿Cuál sería la mejor manera de silenciar esos mensajes o disminuir la verbosidad de las Solicitudes?


En caso de que viniera aquí buscando una manera de modificar el registro de cualquier módulo (posiblemente profundamente anidado), use logging.Logger.manager.loggerDict para obtener un diccionario de todos los objetos del registrador. Los nombres devueltos se pueden usar como argumento para 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)

Por usuario 136036 en un comentario, tenga en cuenta que este método solo muestra los registradores que existen en el momento en que ejecuta el fragmento de código anterior. Si, por ejemplo, un módulo crea un nuevo registrador cuando crea una instancia de una clase, debe colocar este fragmento después de crear la clase para imprimir su nombre.


La guía de Kbrose para encontrar qué registrador estaba generando mensajes de registro fue inmensamente útil. Para mi proyecto Django, tuve que clasificar 120 loggers diferentes hasta que descubrí que era la biblioteca de Python de elasticsearch que me estaba causando problemas. Según la guía en la mayoría de las preguntas, lo deshabilité agregando esto a mis registradores:

... ''elasticsearch'': { ''handlers'': [''console''], ''level'': logging.WARNING, }, ...

Publicación aquí en caso de que alguien más esté viendo los inútiles mensajes de registro que llegan cada vez que ejecutan una consulta de Elasticsearch.


No estoy seguro de si los enfoques anteriores han dejado de funcionar, pero en cualquier caso, aquí hay otra forma de eliminar las advertencias:

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

Básicamente, agregando una variable de entorno en el contexto de la ejecución del script.

De la documentación: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings


Para cualquier persona que use logging.config.dictConfig , puede modificar el nivel de registro de la biblioteca de solicitudes en el diccionario de la siguiente manera:

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


Permítame copiar / pegar la sección de documentación que escribí hace una semana o dos, después de tener un problema similar al suyo:

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'')


Si tienes archivo de configuración, puedes configurarlo.

Agregue urllib3 en la sección de loggers:

[loggers] keys = root, urllib3

Añadir sección logger_urllib3:

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


simple: solo agregue requests.packages.urllib3.disable_warnings() después de las import requests


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

De esta manera, todos los mensajes de nivel = INFO de urllib3 no estarán presentes en el archivo de registro.

Por lo tanto, puede continuar usando el nivel = INFO para sus mensajes de registro ... simplemente modifique esto para la biblioteca que está usando.