日志记录 - 如何忽略导入的模块日志?

Ran*_*ndi 7 python debugging logging python-2.7

如何忽略来自导入模块的日志条目(不是我写的)?

设置:

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()
Run Code Online (Sandbox Code Playgroud)

日志:

INFO:root:calling module
INFO:<someOtherModule>.<some dependency> <random dependency message here>
INFO:root:stuff happened
Run Code Online (Sandbox Code Playgroud)

我怎样才能摆脱那个中间消息?

查看日志记录文档或通过谷歌搜索后,我无法找到答案。
我找到了这个答案,但解决方法似乎对我不起作用。

对于好奇的人,实际的日志条目是:

INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): <address here>  
Run Code Online (Sandbox Code Playgroud)

thi*_*dam 5

一种解决方法(我承认这不是一个很好的方法)是使用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')
Run Code Online (Sandbox Code Playgroud)

我认为,这给您带来的一个好处是,如果依赖模块要报告任何错误警告/严重故障日志消息,这将只允许它们。您可以将禁用属性设置为 logging.WARNING 以仅报告错误或失败消息。


Ste*_*Lin 1

我们有不同级别的日志记录,例如:

      'debug': logging.DEBUG,
      'info': logging.INFO,
      'warning': logging.WARNING,
      'error': logging.ERROR,
      'critical': logging.CRITICAL
Run Code Online (Sandbox Code Playgroud)

因此,如果您不想看到INFO级别,只需提高级别即可,例如:

logging.basicConfig(level=logging.CRITICAL)
Run Code Online (Sandbox Code Playgroud)

不要忘记将所需信息的日志级别更改为CRITICAL.

或者:

尝试这个:

...
logger = logging.getLogger()
...
logger.disabled = True
someOtherModule.function()
logger.disabled = False
...
Run Code Online (Sandbox Code Playgroud)

希望您的问题能够解决。:)