我可以用通常的方式为来自请求包的所有内容设置日志级别:
logging.getLogger('requests').setLevel(...)
但是我有一个特别健谈的requests.Session,我想为来自该会话的请求单独设置日志级别。下面的代码示例显示了我想要做的事情(标记为XX的代码行)。
import requests
import logging
requests.get('https://example.com/').close()
# log output:
# 2020-04-13 19:01:44 [DEBUG] Starting new HTTPS connection (1): example.com:443
# 2020-04-13 19:01:44 [DEBUG] https://example.com:443 "GET / HTTP/1.1" 200 648
s = requests.Session()
s.logger.setLevel(logging.INFO) # XX this doesn't exist, but illustrates what I want to do
s.get('https://example.com/').close() # nothing should be logged发布于 2020-04-14 06:50:25
您可以为requests和urllib3 (由请求使用)设置一个修饰器,以便有选择地为特定功能提供所需的日志记录级别。
这看起来像这样:
import logging
import requests
import functools
logging.basicConfig()
requests_logger = logging.getLogger("requests")
requests_logger_level = requests_logger.getEffectiveLevel()
urllib3_logger = logging.getLogger("urllib3")
urllib3_logger_level = requests_logger.getEffectiveLevel()
url = 'https://pypi.org/pypi/requests/json'
def requests_debug(f):
@functools.wraps(f)
def func(*args, **kwargs):
try:
requests_logger.setLevel(logging.DEBUG)
urllib3_logger.setLevel(logging.DEBUG)
return f(*args, **kwargs)
finally:
requests_logger.setLevel(requests_logger_level)
urllib3_logger.setLevel(urllib3_logger_level)
return func
@requests_debug
def get_data():
r = requests.get(url)
return r.json()['info']['author']
if __name__ == '__main__':
a = get_data()
print(a)https://stackoverflow.com/questions/61197601
复制相似问题