配置requests的日志输出,掌握请求的所有细节

云计算分享者 2024-02-24 02:14:00
背景

最近写一个代码的时候,需要使用requests从外部系统拿一些数据.外部系统有一些权限认证,又没有SDK,只有自己根据文档写了一个.其中比较麻烦的是发出去的请求没有办法看到request,response所有细节,错了都不知道怎么回事.

实在没有办法,用了tcpdump直接抓包来看,但是调试一下就抓一下包,然后分析一下,确实太麻烦了.然后搜索了一下requests的日志打印,总结如下.

python的日志层次结构

python的logging模块中有很多的logger,这些logger组成了一颗树.每个logger都有一个有效level,这个有效level决定了日志是输出还是忽略.

这颗树最顶层是root logger,其默认的level是WARNING(30).其他的logger的默认level是NOSET(0),NOSET表示自己的level没有设置,由最近的设置了level的祖先logger来决定.

官方文档描述的logger有效level问题

比如在完全没有对logging系统进行配置的情况下.root logger的level是30(WARNING),而且其他logger的有效level也是30(WARNNING)

因为其他的logger的level为默认值0(NOSET),有效level又最近的设置了level的logger(root)决定.

在把root logger的level设置为DEBUG(10)之后,其他logger的有效level也变成了10(DEBUG)

requests的日志输出

配置了logging level,让requests的有效level是DEBUG之后,使用如下代码来测试requests的日志输出

我们能看到发出的请求和返回的基本信息了

但是里面没有输出request和response的HTTP HEADER信息,定位问题还是比较麻烦.

需要通过打开http.client的debuglevel来解决

这样请求和返回的http header都输出了.

总结

python的库基本都有一个logging logger,如果要单独配置,那么需要通过观察logging.root.manager.loggerDict里面的名字来配置.我一般都是直接配置root logger,这样其他的库里面的logger有效level也就跟着变了.

0 阅读:0

云计算分享者

简介:感谢大家的关注