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

时间:2014-12-29 08:19:51

标签: python python-2.7 debugging logging

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

设置:

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

如何摆脱那条中间信息?

在查看日志记录文档或使用Google搜索后,我无法找到答案 我找到this回答,但解决方法对我来说似乎不起作用。

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

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

2 个答案:

答案 0 :(得分:2)

一个解决方法(我承认不是一个漂亮的方法)是使用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以仅报告错误或失败消息。

答案 1 :(得分:1)

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

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

因此,如果您不希望看到INFO级别,只需提高级别,例如:

logging.basicConfig(level=logging.CRITICAL)

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

OR:

试试这个:

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

希望你的问题得到解决。 :)