簡體   English   中英

python logger模塊使庫調用自己的日志記錄功能

[英]python logger module is causing libraries to call their own logging functions

我的初衷只是記錄我通過呼叫的數據

logger.debug(' testing ') 

在我自己的代碼中調用。 這有效。

但是,在.py文件頂部頂部初始化一個logger對象之后,我正在使用的其中一個庫的記錄器似乎也在調用它們的logger(請求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是一種動態語言並且變量是可見的,但這並沒有多大意義,因為請求可能初始化它自己的記錄器。

有任何想法嗎? 謝謝。

你可以做一個

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

這會將所有requests的輸出限制為WARNING或更高(當然,如果您願意,可以設置更高的級別)。

同樣的方法適用於控制您可能使用的其他庫的記錄器的詳細程度。

接受的答案並不是真正的解決方案。 您不必明確地保管您使用的每個庫實例化的每個記錄器。 使用logging.Filter也不是最好的主意,因為標准過濾器會抑制所有無法識別的消息,但您可能仍需要來自庫的更高級別的消息。

正確的答案是遵循格雷格的評論中的兩個建議。 將根記錄器設置得更高,並為您自己的消息使用不同的記錄器,然后您可以管理它們:

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 ,它忽略來自子記錄器的消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM