¿Cómo desactivo los mensajes de registro de la biblioteca de Solicitudes?
De forma predeterminada, la biblioteca de Python de Solicitudes escribe mensajes de registro en la consola, como por ejemplo:
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 desactivarlos. ¿Cuál sería la mejor manera de silenciar esos mensajes o disminuir la verbosidad de las solicitudes?
Descubrí cómo configurar el nivel de registro de solicitudes ; se realiza a través del módulo de registro estándar . Decidí configurarlo para que no registre mensajes a menos que sean al menos advertencias:
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
Si también desea aplicar esta configuración para la biblioteca urllib3 (normalmente utilizada por solicitudes), agregue lo siguiente:
logging.getLogger("urllib3").setLevel(logging.WARNING)
En caso de que haya venido aquí buscando una forma de modificar el registro de cualquier módulo (posiblemente profundamente anidado), utilícelo logging.Logger.manager.loggerDict
para obtener un diccionario de todos los objetos registradores. Los nombres devueltos se pueden utilizar 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)
Según el usuario136036 en un comentario, tenga en cuenta que este método solo le muestra los registradores que existen en el momento en que ejecuta el fragmento anterior. Si, por ejemplo, un módulo crea un nuevo registrador cuando crea una instancia de una clase, entonces debe colocar este fragmento después de crear la clase para poder imprimir su nombre.
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.
Así que puedes continuar usando nivel=INFO para tus mensajes de registro...simplemente modifícalo para la biblioteca que estás usando.