如何禁用请求库中的日志消息?

默认情况下, 请求库将日志消息写入控制台,沿着Starting new HTTP connection (1): example.com等行。我通常对这些消息不感兴趣,我该如何禁用它们?

我发现如何configuration请求的日志logging级别,这是通过标准日志logging模块完成的。 我决定将其configuration为不logging消息,除非它们至less是警告:

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

如果您希望将此设置应用于urllib3库(通常由请求使用),请添加以下内容:

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

如果你来这里寻找修改任何(可能是深度嵌套的)模块的日志logging的方法,可以使用logging.Logger.manager.loggerDict来获得所有logging器对象的字典,然后你可以使用它作为logging.getLogger的参数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) 
 import logging urllib3_logger = logging.getLogger('urllib3') urllib3_logger.setLevel(logging.CRITICAL) 

这样,所有来自urllib3的level = INFO消息都不会出现在日志文件中。

因此,您可以继续使用级别= INFO作为日志消息…只需对您正在使用的库进行修改即可。

让我复制/粘贴我在一两周前写过的文档部分,在遇到类似于你的问题之后:

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

对于任何使用logging.config.dictConfig你都可以像这样改变字典中的请求库日志级别:

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

简单:只需在import requests后添加requests.packages.urllib3.disable_warnings()

我不确定以前的方法是否已经停止工作,但无论如何,这里有另外一种消除警告的方法:

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

基本上,在脚本执行的上下文中添加一个环境variables。

从文档: https : //urllib3.readthedocs.org/en/latest/security.html#disabling-warnings

如果你有configuration文件,你可以configuration它。

在logging器部分添加urllib3:

 [loggers] keys = root, urllib3 

添加logger_urllib3部分:

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