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


De forma predeterminada, la biblioteca Requests python escribe mensajes de registro en la consola, siguiendo las líneas de:

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

Normalmente no estoy interesado en 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?

Author: MayeulC, 2012-06-14

9 answers

Descubrí cómo configurar el nivel de registro de requests, se hace a través del módulo estándar logging. 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 a la biblioteca urllib3 (normalmente utilizada por las solicitudes) también, agregue lo siguiente:

logging.getLogger("urllib3").setLevel(logging.WARNING)
 445
Author: aknuds1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-11 16:15:54

En caso de que haya venido 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 pueden ser usados 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 user136036 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 de código anterior. Si, por ejemplo, un módulo crea un nuevo logger cuando instancias una clase, entonces debes poner este fragmento después de crear la clase para imprimir su nombre.

 62
Author: kbrose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-11 19:31:53
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)

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

Para que pueda seguir utilizando el nivel=INFO para sus mensajes de registro...simplemente modifique esto para la biblioteca que está utilizando.

 26
Author: shaolin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-12 10:55:25

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

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')
 14
Author: sorin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-17 14:27:53

Para cualquiera que use logging.config.dictConfig puede alterar 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
    }
}
 10
Author: TheHerk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-01 19:52:59

La guía de Kbrose para encontrar qué registrador estaba generando mensajes de registro fue inmensamente útil. Para mi proyecto Django, tuve que ordenar 120 loggers diferentes hasta que descubrí que era la biblioteca de Python elasticsearch la 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,
      },     
      ...

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

 0
Author: Robert Townley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-22 17:03:35

Simple: simplemente agregue requests.packages.urllib3.disable_warnings() después de import requests

 -1
Author: evandrix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-09 02:22:10

Si tiene un archivo de configuración, puede configurarlo.

Agregue urllib3 en la sección loggers:

[loggers]
keys = root, urllib3

Añadir la sección logger_urllib3:

[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool
 -1
Author: Sank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-09 07:34:26

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, añadiendo 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

 -1
Author: newlog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-30 12:36:34