¿Cómo desactivo los mensajes de registro de la biblioteca de Solicitudes?

Resuelto aknuds1 asked hace 12 años • 13 respuestas

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?

aknuds1 avatar Jun 14 '12 15:06 aknuds1
Aceptado

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)
aknuds1 avatar Jun 14 '2012 08:06 aknuds1

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.loggerDictpara 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.

kbrose avatar Mar 24 '2016 19:03 kbrose
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.

shaolin avatar Feb 12 '2014 10:02 shaolin