参考:
logging模块日志重复打印/不打印的根本原因:
写法不当!
原因
以下面写法为例
def get_logger(name):
logging.config.dictConfig(config)
logger = logging.getLogger(name)
return logger
如果该函数被调用多次,并不是创建了两个logger实例,logger其实是同一个实例,非第一次实例化的时候,会将所有之前用同一配置实例化的logger中的disabled变量赋为True,使其失效。
上述理解的依据:可以在第二次实例化的时候,查看logging.Logger.manager.loggerDict的取值,该字典中存放了所有的logger实例,根据名字找到我们实例化的logger,一般在最后。此时如果将disabled字段改为True,则可以正确打印日志。
正确写法
不要创建多个logger,仅使用一个logger,在其他文件中都引用该logger,即:
import codecs
import logging.config
import nlpertools
import yaml
nlpertools.j_mkdir("logs")
with codecs.open('conf/log_config.yml', 'r', 'utf-8') as stream:
config = yaml.load(stream, Loader=yaml.FullLoader)
logging.config.dictConfig(config)
logger = logging.getLogger()