python logging日志重复打印问题解决方案

4 阅读1分钟

尝试过的方案

最终解决方案

Duplicate log output when using Python logging module

# 是实例化的logger,设定该属性为False
logger.propagate = False

最终使用logger封装类

import logging


class Logger:
    def __init__(self, log_name="info", log_level=logging.DEBUG, logger_name=None):
        """
        指定保存日志的文件路径,日志级别,以及调用文件
        将日志存入到指定的文件中
        """
        self.logger = logging.getLogger(logger_name)
        self.logger.setLevel(log_level)
        # 解决日志重复打印问题
        self.logger.propagate = False

        fh = logging.FileHandler(log_name)
        fh.setLevel(log_level)

        fmt = "[%(levelname)s] %(asctime)s %(filename)s:%(lineno)d: %(message)s"
        formatter = logging.Formatter(fmt)

        if not self.logger.handlers:
            ch = logging.StreamHandler()
            ch.setLevel(log_level)

            fh.setFormatter(formatter)
            self.logger.addHandler(fh)

            ch.setFormatter(formatter)
            self.logger.addHandler(ch)

    def getlog(self):
        return self.logger


if __name__ == "__main__":
    logger = Logger("a.log", logging.DEBUG, __name__).getlog()
    logger.debug("this is a")
    logger = Logger("a.log", logging.DEBUG, __name__).getlog()
    logger.debug("this is a 2")