尝试过的方案
最终解决方案
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")