Answers:
我发现了如何配置请求的日志记录级别,这是通过标准的日志记录模块完成的。我决定将其配置为不记录消息,除非它们至少是警告:
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
如果您也希望将此设置应用于urllib3库(通常由请求使用),请添加以下内容:
logging.getLogger("urllib3").setLevel(logging.WARNING)
pysimplesoap
,这个答案可以帮助我节省时间
getLogger("urllib3")
禁止显示消息。
如果您是来这里寻找修改任何(可能是深度嵌套的)模块的日志记录的方法,请使用它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)
请注意每个用户136036中的注释,此方法仅显示运行上述代码片段时存在的记录器。例如,如果某个模块在实例化一个类时创建了一个新的记录器,则必须在创建该类之后放置此代码段以打印其名称。
urllib3
在使用时使日志消息静音boto3
。在这种情况下botocore.vendored.requests.packages.urllib3
,记录器是,所以我使用了它:logging.getLogger("botocore.vendored.requests.packages.urllib3").setLevel(logging.WARNING)
我终于摆脱了消息。
APScheduler
时(如您调用时所做的那样),这将无法工作BackgroundScheduler.BackgroundScheduler()
。
在遇到类似于您的问题之后,让我复制/粘贴一周或两周前写的文档部分:
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
}
}
dictConfig
在后台使用。
将记录器名称设置为requests
或requests.urllib3
对我不起作用。我必须指定确切的记录器名称才能更改记录级别。
首先查看您已定义的记录器,以查看要删除的记录器
print(logging.Logger.manager.loggerDict)
您将看到类似以下内容:
{...'urllib3.poolmanager': <logging.Logger object at 0x1070a6e10>, 'django.request': <logging.Logger object at 0x106d61290>, 'django.template': <logging.Logger object at 0x10630dcd0>, 'django.server': <logging.Logger object at 0x106dd6a50>, 'urllib3.connection': <logging.Logger object at 0x10710a350>,'urllib3.connectionpool': <logging.Logger object at 0x106e09690> ...}
然后为确切的记录器配置级别:
'loggers': {
'': {
'handlers': ['default'],
'level': 'DEBUG',
'propagate': True
},
'urllib3.connectionpool': {
'handlers': ['default'],
'level': 'WARNING',
'propagate' : False
},
答案在这里: 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()
之后添加import requests
INFO
。
我不确定以前的方法是否已停止工作,但是无论如何,这是消除警告的另一种方法:
PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py
基本上,在脚本执行的上下文中添加环境变量。
从文档中:https : //urllib3.readthedocs.org/en/latest/security.html#disabling-warnings