未改动代码的前提下,Python requests库为何突然输出冗余连接日志?
脚本突然输出冗余连接请求日志的原因
你看到的这几行日志,根本不是requests库自身打印的内容,它是requests底层依赖的HTTP传输组件urllib3输出的运行日志。
没改代码却突然冒日志的常见触发场景
- 运行环境的依赖版本被自动更新了:urllib3在2.0版本调整了默认日志的输出阈值,旧版本里必须手动开DEBUG模式才会打印的“新建HTTPS连接”“请求响应状态行”这类内容,在2.0及后续版本里会以INFO级别默认输出,只要日志没被更高的阈值过滤,就会直接打印到控制台。
- 近期引入的其他第三方库修改了全局日志配置:不少工具类库在初始化时会调用
logging.basicConfig(),把全局根日志的默认输出级别从WARNING调低到INFO/DEBUG,还给控制台输出加了无过滤规则的日志处理器,把原本被默认级别挡住的urllib3日志直接放了出来。requests从设计上就不会主动向控制台输出这类连接细节,所有相关日志全来自底层的urllib3。 - 系统层面的依赖同步更新:不管是pip的自动升级机制、系统包管理器的依赖同步,还是Python运行环境的版本迭代,只要重置了日志输出的默认规则,就算你一行业务代码都没改,这类冗余日志也会突然出现。
快速屏蔽冗余日志的方法
不需要调整原来的请求逻辑,只需要在脚本最开头、所有第三方库导入完成后,手动把urllib3的日志级别调回默认的WARNING阈值就行:
import logging # 过滤urllib3输出的INFO及更低级别的运行日志 logging.getLogger("urllib3").setLevel(logging.WARNING)
如果调整之后还是有日志输出,就排查最近新增的第三方库,检查有没有库在初始化时强制修改全局根日志级别的逻辑。
内容的提问来源于stack exchange,提问作者janeden
相关产品推荐
相关产品推荐

