记录器不显示外部库的INFO

时间:2016-10-06 14:31:57

标签: python logging

我希望记录器能够从我的所有代码中打印INFO消息,但不能从第三方库中打印出来。这在多个地方讨论,但建议的解决方案对我不起作用。这是我对外部库的模拟,extlib.py

#!/usr/bin/env python3
from logging import info

def f():
    info("i am extlib f()")

我的模块:

#!/usr/bin/env python3
import logging
from logging import info
import extlib

logging.basicConfig(level=logging.INFO)
info("I am mymodule")
extlib.f()

输出:

  

信息:root:我是mymodule

     

信息:root:我是extlib f()

我尝试仅为本地模块启用INFO:

#!/usr/bin/env python3
import logging
from logging import info
import extlib

logging.getLogger(__name__).setLevel(logging.INFO)
info("I am mymodule")
extlib.f()

输出:没有

期望的输出:

  

信息:root:我是mymodule

我做错了什么?

1 个答案:

答案 0 :(得分:2)

问题是他们没有在外部库中使用记录器类。如果他们那么你可以过滤掉它。我不确定您是否可以阻止他们记录信息,因为他们正在使用info函数调用。这是一个解决方法。

Suppressing output of module calling outside library

更新

这里是你做记录器的方法

import logging

# create logger
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')