我希望记录器能够从我的所有代码中打印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
我做错了什么?
答案 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')