python记录器模块导致库调用自己的日志记录函数



我的初衷只是记录我通过调用的数据

logger.debug(' testing ') 

在我自己的代码中调用。这是有效的。

但是,在初始化.py文件顶部的记录器对象之后,我正在使用的一个库的记录器似乎也在调用他们的记录器(请求httplib)。

08/24 10:01:34 - requests.packages.urllib3.connectionpool - INFO - connectionpool.py - 202 - Starting new HTTP connection (1): www.technicianonline.com
08/24 10:01:34 - requests.packages.urllib3.connectionpool - DEBUG - connectionpool.py - 296 - "GET / HTTP/1.1" 200 None
08/24 10:01:34 - requests.packages.urllib3.connectionpool - DEBUG - connectionpool.py - 296 - "GET / HTTP/1.1" 200 None
08/24 10:01:34 - root - DEBUG - finder.py - 47 - testing

我只想要根DEBUG日志,因为那是我自己的。但是,所有这些请求日志也包含在内。如果非要我猜测,那是因为python是一种动态语言,变量是可见的,但这没有多大意义,因为请求可能会初始化它自己的记录器。

有什么想法吗?谢谢

您可以进行

logging.getLogger('requests').setLevel(logging.WARNING)

这将限制所有requestsWARNING或更高级别的输出(当然,如果您愿意,您可以将级别设置得更高)。

同样的方法也适用于控制您可能使用的其他库的记录器的详细程度。

接受的答案实际上并不是一个实用的解决方案。您不应该显式地照顾您使用的每个库实例化的每个记录器。使用logging.Filter也不是最好的主意,因为标准过滤器会抑制所有无法识别的消息,但您可能仍然希望库中有更高级别的消息。

正确的答案是遵循Greg评论中的两个建议。将根记录器设置得更高,并为您自己的消息使用不同的记录器,然后您可以对其进行管理:

In [1]: import logging
In [2]: logging.basicConfig(level=logging.WARNING)
In [3]: l = logging.getLogger('myapp')
In [4]: l.setLevel(logging.DEBUG)
In [5]: l.debug('hello')
DEBUG:test:hello
In [6]: logging.getLogger('library').debug("you won't see me")
In [7]: logging.getLogger('library').critical("you need to see me")
CRITICAL:library:you need to see me

您可以添加一个logging.Filter,它会忽略来自子记录器的消息。

最新更新