[英]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.