3

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

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

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

有任何想法吗?谢谢。

4

3 回答 3

3

你可以做一个

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

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

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

于 2013-08-24T17:28:51.207 回答
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
于 2015-07-14T17:19:34.697 回答
1

You can add a logging.Filter which ignores messages from the child loggers.

于 2013-08-24T17:11:02.193 回答