如何完全移除Python中requests模块的日志记录
我该如何彻底关闭Python中requests模块的所有日志记录?我甚至不想设置到CRITICAL级别。就像这样
import logging
requests_log = logging.getLogger("requests")
requests_log.setLevel(logging.CRITICAL)
但我希望完全没有任何消息,连CRITICAL的都不想要。
2 个回答
2
我试过接受的答案,但没成功。不过,urllib3 的文档提到你可以用下面这个方法来关闭日志记录:
import urllib3
urllib3.disable_warnings()
来源:urllib3 的文档
17
首先,requests
本身并不会记录任何日志;只有它依赖的 urllib3
库会记录日志。这个库只会在 INFO
和 DEBUG
级别记录信息,所以如果你把日志级别设置为 logging.CRITICAL
,这就意味着所有的日志信息都会被禁用:
urllib3_log = logging.getLogger("urllib3")
urllib3_log.setLevel(logging.CRITICAL)
你也可以选择直接禁用日志的传播:
logging.getLogger("urllib3").propagate = False
这样就可以完全关闭 urllib3
库的所有日志记录。
urllib3
项目在根日志记录器上安装了一个 NullHandler()
处理器,这样可以确保即使禁用了传播,未处理的消息也不会使用 lastResort
处理器。
不过,如果你不相信未来的 requests
版本不会把 sys.maxint
当作日志级别使用,同时又忘记设置 NullHandler()
,那你可以在项目的根日志记录器对象上添加自己的 NullHandler()
,然后在那儿禁用传播:
import logging
requests_log = logging.getLogger("requests")
requests_log.addHandler(logging.NullHandler())
requests_log.propagate = False
这样一来,requests
层级中的所有日志记录都会被指向 NullHandler()
实例,并且因为 propagate
设置为 False
,日志记录就会在这里停止。你可以用这个方法来静音层级中的任何日志记录器。
在我看来,这有点过头了,迄今为止没有任何 requests
的版本使用日志记录,而且这个项目的开发者都很有能力,不太可能在将来添加日志记录时配置错误。