首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python记录器模块导致库调用自己的日志记录函数。

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

Stack Overflow用户
提问于 2013-08-24 17:07:26
回答 3查看 377关注 0票数 3

我的初衷只是记录我正在调用的数据

代码语言:javascript
复制
logger.debug(' testing ') 

在我自己的代码中调用。这个很管用。

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

代码语言:javascript
复制
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是一种动态语言,并且变量是可见的,但这没有多大意义,因为请求可能初始化它自己的记录器。

有什么想法吗?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-24 17:28:51

你可以做一个

代码语言:javascript
复制
logging.getLogger('requests').setLevel(logging.WARNING)

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

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

票数 3
EN

Stack Overflow用户

发布于 2015-07-14 17:19:34

公认的答案并不是一个实际的解决办法。您不应该必须显式地照看由您使用的每个库实例化的每个记录器。使用logging.Filter也不是最好的主意,因为标准过滤器将禁止所有未识别的消息,但您可能仍然希望从库中获得更高级别的消息。

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

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2013-08-24 17:11:02

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18421042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档