python logging模块

231 阅读1分钟

参考:

看这个

blog.csdn.net/weixin_3091…

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()