python中日志输出重复的解决办法

#coding:utf-8
import logging
def log():
    #创建logger,如果参数为空则返回root logger
    logger = logging.getLogger()  #定义一个logger(日志器提供应用程序提供接口)
    logger.setLevel(logging.ERROR )  #设置logger日志等级
        
    # 判断logger是否已经添加过handler,是则直接返回logger对象,否则执行handler设定以及addHandler(ch)
    if not logger.handlers:
        #创建handler(日志处理器)将logger创建的日志按照自身定义的formatter格式输出到指定地方
        fh = logging.FileHandler("D:\workspace\thinksns\result\log\test.log",encoding="utf-8") #将日志消息发送到磁盘文件,默认情况下文件大小会无限增长
        ch = logging.StreamHandler()  #将日志消息发送到输出到Stream,如std.out, std.err或任何file-like对象。     
        #设置输出日志格式
        formatter = logging.Formatter(
        fmt="%(asctime)s %(levelname)s %(filename)s%(funcName)s %(message)s",  #指定消息格式化字符串,如果不指定该参数则默认使用message的原始值
        datefmt="%Y/%m/%d %X"  #指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S"
                    
                  )
                 
        #将formatter定义的格式加载到handler
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)
                  
        #为logger添加的日志处理器,
        logger.addHandler(fh)
        logger.addHandler(ch)
              
    return logger

如果去掉if not logger.handlers:语句,我们日志将会重复输出2次,所以在日志使用前,加以判断有就直接返回logger,没有就创建后返回

墨者看遍天下皆是丹青,测试看尽万物皆是bug
原文地址:https://www.cnblogs.com/striver-dl/p/14086235.html