如何从Python中的请求模块中完全删除任何日志记录

如何从Python中的请求模块中完全删除任何日志记录,python,python-2.7,logging,python-requests,Python,Python 2.7,Logging,Python Requests,如何在Python中完全删除请求模块中的任何日志记录?我甚至不需要设置临界值。像这样吗 import logging requests_log = logging.getLogger("requests") requests_log.setLevel(logging.CRITICAL) 但是没有任何消息,即使是关键消息。首先,请求不会记录任何内容;只有请求所依赖的urllib3库才会执行此操作。该库仅在INFO和DEBUG级别记录消息,因此将日志级别设置为logging。CRITICAL已禁用

如何在Python中完全删除请求模块中的任何日志记录?我甚至不需要设置临界值。像这样吗

import logging
requests_log = logging.getLogger("requests")
requests_log.setLevel(logging.CRITICAL)

但是没有任何消息,即使是关键消息。

首先,
请求不会记录任何内容;只有
请求
所依赖的
urllib3
库才会执行此操作。该库仅在
INFO
DEBUG
级别记录消息,因此将日志级别设置为
logging。CRITICAL
已禁用所有消息:

您还可以禁用传播:

logging.getLogger("urllib3").propagate = False
这足以完全禁用
urllib3
库所做的所有日志记录

urllib3
项目已在项目根记录器上安装了一个处理程序对象,该对象可确保即使在传播被禁用时,也不会将用于未处理的消息

也就是说,如果您不相信未来版本的
请求
不会使用
sys.maxint
作为日志级别,同时忽略设置
NullHandler()
,那么请务必在项目根记录器对象上添加您自己的
NullHandler()
,然后禁用传播:

import logging

requests_log = logging.getLogger("requests")
requests_log.addHandler(logging.NullHandler())
requests_log.propagate = False
现在,
请求
层次结构中的所有日志记录都将定向到
NullHandler()
实例,并将
propagate
设置为
False
时,日志记录停止在那里。您可以使用此选项使层次结构中的任何记录器静音


在我看来,这太过分了,到目前为止,没有任何
请求
版本使用日志记录,而且该项目配备了有能力的开发人员,如果他们添加了日志记录,他们就不太可能错误地配置日志记录设置。

接受的答案对我来说不合适。但请指出,您可以通过以下方式禁用日志记录:

import urllib3
urllib3.disable_warnings()

来源:

请求模块不记录消息。嵌入的
urllib3
库会记录,但不会记录任何
关键级别的消息。你的代码已经足够了。这可能是惊人的重复。我添加了代码,可以检查系统中的每个记录器,并将其级别设置为临界。我把这个代码放在我应用程序中每个文件的顶部。我仍然可以看到关于我的请求的消息。这是请求中的一个bug。我的意思是它使我的程序日志无法读取。每个请求有9行日志。我使用的是python版本2.7.6(请求2.12.4,urllib3 1.7.1)。即使在我做了所有这些之后,每个请求都会得到日志条目。不过,没有迹象表明这些日志来自何处。@chanux:对不起,为什么你要告诉我你的版本?对不起,我不小心按了enter:)。非常感谢您的帮助。@chanux:我更新了答案,以便更清楚地说明您需要禁用
urllib3
的日志记录,而不是
请求
。这行
请求\u log.addHandler(logging.NullHandler())
的目的是什么?建议将
logging.NullHandler
附加到库的顶级记录器,并且仅当您不希望库的用户在其应用程序中没有日志配置的情况下将库的严重事件消息
logging.WARNING
或更高级别打印到
sys.stderr
时。但这里不是库代码,而是应用程序代码。因此无需重定向任何内容,因为
传播
import urllib3
urllib3.disable_warnings()