首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置特定requests.Session的日志级别

设置特定requests.Session的日志级别
EN

Stack Overflow用户
提问于 2020-04-14 06:07:25
回答 1查看 85关注 0票数 1

我可以用通常的方式为来自请求包的所有内容设置日志级别:

logging.getLogger('requests').setLevel(...)

但是我有一个特别健谈的requests.Session,我想为来自该会话的请求单独设置日志级别。下面的代码示例显示了我想要做的事情(标记为XX的代码行)。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-04-14 06:50:25

您可以为requestsurllib3 (由请求使用)设置一个修饰器,以便有选择地为特定功能提供所需的日志记录级别。

这看起来像这样:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61197601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档