默认情况下,Requests python库将日志消息写入控制台,如下所示:
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
我通常对这些消息不感兴趣,并希望禁用它们。什么是沉默这些消息或减少请求的冗长的最好方法?
默认情况下,Requests python库将日志消息写入控制台,如下所示:
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
我通常对这些消息不感兴趣,并希望禁用它们。什么是沉默这些消息或减少请求的冗长的最好方法?
当前回答
答案在这里:Python:如何从第三方库中抑制日志记录语句?
您可以为basicConfig保留默认日志级别,然后在获取模块的日志记录器时设置DEBUG级别。
logging.basicConfig(format='%(asctime)s %(module)s %(filename)s:%(lineno)s - %(message)s')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.debug("my debug message")
其他回答
简单:只需在导入请求后添加requests.packages.urllib3.disable_warnings()
如果您有配置文件,可以对其进行配置。
在记录器部分添加urllib3:
[loggers]
keys = root, urllib3
添加logger_urllib3 section:
[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool
我发现了如何配置请求的日志级别,它是通过标准日志模块完成的。我决定将其配置为不记录消息,除非它们至少是警告:
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
如果你想对urllib3库(通常由请求使用)也应用这个设置,添加以下内容:
logging.getLogger("urllib3").setLevel(logging.WARNING)
如果您在这里寻找修改任何(可能嵌套很深的)模块的日志记录的方法,请使用logging. logger .manager. loggerdict来获取所有记录器对象的字典。返回的名称可以用作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)
对于注释中的user136036,请注意此方法只显示在运行上述代码段时存在的记录器。例如,如果一个模块在实例化一个类时创建了一个新的记录器,那么必须在创建类之后放入这个代码片段,以便打印它的名称。
对于任何使用logging.config.dictConfig的人来说,你可以像这样修改字典中的请求库日志级别:
'loggers': {
'': {
'handlers': ['file'],
'level': level,
'propagate': False
},
'requests.packages.urllib3': {
'handlers': ['file'],
'level': logging.WARNING
}
}