python logger模块使库调用自己的日志记录功能

时间:2013-08-24 17:07:26

标签: python logging

我的初衷只是记录我通过

呼叫的数据
logger.debug(' testing ') 

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

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

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

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

有什么想法吗?感谢。

3 个答案:

答案 0 :(得分:3)

你可以做一个

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

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

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

答案 1 :(得分:3)

接受的答案并非真正的实际解决方案。您不必明确地保管您使用的每个库实例化的每个记录器。使用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

答案 2 :(得分:1)

您可以添加忽略来自子记录器的消息的logging.Filter