如何关闭 Python requests 库输出的日志?
requests 的日志来自它自己和底层 urllib3,把这两个 logger 的级别设为 WARNING 即可静音。本文给出代码写法和 Django settings 配置方式。
requests 的调试日志由 requests 和 urllib3 两个 logger 产生,把它们的级别提升到 WARNING 就不会再刷 INFO/DEBUG 消息。
代码中设置
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
logging.getLogger("urllib3").setLevel(logging.WARNING)
实际刷屏的主要是 urllib3 的连接池日志(Starting new HTTPS connection...),两行都加上才能彻底安静。
Django 项目:在 settings.py 配置
LOGGING = {
# ...
'loggers': {
'urllib3': {
'handlers': ['file'],
'level': 'WARNING',
'propagate': False,
},
'requests': {
'handlers': ['file'],
'level': 'WARNING',
'propagate': False,
},
},
}
原理解释
Python 的 logging 按 logger 名称分层(urllib3.connectionpool 是 urllib3 的子 logger)。对父 logger 设级别,子 logger 的消息会沿层级传递并受其 handler 影响。设为 WARNING 后,DEBUG/INFO 级别的请求日志被过滤,警告和错误仍然保留——这正是你想要的行为。
常见问题(FAQ)
Q:设了 WARNING 还是有输出?
A:检查是否有代码调用了 logging.basicConfig(level=logging.DEBUG),或第三方库自己加了 handler。也可以顺便把 urllib3.connectionpool 单独设级别。
Q:会不会把真正的错误也藏掉?
A:不会。WARNING 级别只过滤 INFO 和 DEBUG,连接失败、超时等 ERROR 级日志照常输出。
Q:只想临时静音一次请求?
A:可以用上下文管理器临时调级别,结束后恢复;但更常见的需求是全局调一次,放在应用入口即可。