现象:
使用logging模块保存日志,第一条记录写一次,第二条记录写两次,第三条记录写三次,日志写入重复。
原因:
没有移除handler 解决:在日志记录完之后removeHandler
例如:
def log(msg):
#创建logger,如果参数为空则返回root logger
logger = logging.getLogger("nick")
logger.setLevel(logging.DEBUG) #设置logger日志等级
#创建handler
fh = logging.FileHandler("test.log",encoding="utf-8")
ch = logging.StreamHandler()
#设置输出日志格式
formatter = logging.Formatter(
fmt="%(asctime)s %(name)s %(filename)s %(message)s",
datefmt="%Y/%m/%d %X"
)
#为handler指定输出格式
fh.setFormatter(formatter)
ch.setFormatter(formatter)
#为logger添加的日志处理器
logger.addHandler(fh)
logger.addHandler(ch)
# 输出不同级别的log
logger.info(msg)
log("泰拳警告")
log("提示")
log("错误")
输出结果:
2018/05/10 20:06:18 nick test.py 泰拳警告
2018/05/10 20:06:18 nick test.py 提示
2018/05/10 20:06:18 nick

当使用Python的logging模块时,发现日志记录出现重复写入的现象,即每次调用记录日志,写入次数递增。问题在于未移除handler。解决方案包括在日志记录完后调用removeHandler移除handler,或者在log方法中检查logger是否已存在handler,避免重复添加。这样可以确保日志正确且唯一地被记录。
最低0.47元/天 解锁文章
17万+

被折叠的 条评论
为什么被折叠?



