簡體   English   中英

日志記錄 - 如何忽略導入的模塊日志?

[英]logging - how to ignore imported module logs?

如何忽略來自導入模塊的日志條目(不是我寫的)?

設置:

import logging    
import <someOtherModule>

logging.basicConfig(level=logging.INFO)    

class myClass: 
   ...
   def some_method(self):
       logging.info('calling module')
       someOtherModule.function()
       logging.info('stuff happened')

if __name__ == "__main__":
    a = myClass().some_method()

日志:

INFO:root:calling module
INFO:<someOtherModule>.<some dependency> <random dependency message here>
INFO:root:stuff happened

我怎樣才能擺脫那個中間信息?

在查看日志記錄文檔或通過谷歌搜索后,我無法找到答案。
我找到了這個答案,但解決方法似乎對我不起作用。

對於好奇的人,實際的日志條目是:

INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): <address here>  

一個解決方法(我承認不是一個漂亮的),是使用logging.disable方法在調用依賴方法時禁用INFO日志。

class myClass: 
    ...
   def some_method(self):
       logging.info('calling module')
       logging.disable(logging.INFO)
       someOtherModule.function()
       logging.disable(logging.NOTSET)
       logging.info('stuff happened')

我認為,這樣做的一個優點是,如果依賴模塊要報告任何錯誤警告/嚴重故障日志消息,則只允許它們。 您可以將disable屬性設置為logging.WARNING以僅報告錯誤或失敗消息。

我們有不同的日志記錄級別,例如:

      'debug': logging.DEBUG,
      'info': logging.INFO,
      'warning': logging.WARNING,
      'error': logging.ERROR,
      'critical': logging.CRITICAL

所以,如果你不想看到INFO級別,只需提高級別,如:

logging.basicConfig(level=logging.CRITICAL)

不要忘記將所需信息的日志級別更改為CRITICAL

要么:

試試這個:

...
logger = logging.getLogger()
...
logger.disabled = True
someOtherModule.function()
logger.disabled = False
...

希望你的問題得到解決。 :)

您可以使用以下命令設置給定模塊的日志記錄級別:

logging.getLogger("someOtherModule").setLevel(logging.WARNING)

暫無
暫無

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

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