最近一个在研项目需要做一个原型系统,为方便高效的保存处理过程,采用python的logging库实现日志功能。原型系统程序包含主函数文件和几个功能文件,每个文件中都实例化了自己封装好的日志类,但是出现了一个问题,每条日志会重复打印好几次。查了相关的资料,说是日志实例具备继承关系。
解决办法就是在创建handler之前判断一下logger是否已经具备句柄了,若已存在,则不要再次创建。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36import logging # 开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件 class Logger: def __init__(self, logger_id=1, logFile='Logs/xxx.log'): """ 指定保存日志的文件路径,日志级别,以及调用文件 将日志存入到指定的文件中 """ # 创建一个logger self.logger = logging.getLogger("xxx_" + str(logger_id)) self.logger.setLevel(logging.DEBUG) # self.logger.propagate = False # 先判断logger是否存在文件句柄,若不存在则进行创建,否则会出现日志重复打印的问题 if not self.logger.handlers: # 创建一个handler,用于写入日志文件 fh = logging.FileHandler(logFile) fh.setLevel(logging.DEBUG) # 再创建一个handler,用于输出到控制台 # ch = logging.StreamHandler() # ch.setLevel(logging.DEBUG) # 定义handler的输出格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(funcName)s - %(message)s') fh.setFormatter(formatter) # ch.setFormatter(formatter) # 给logger添加handler self.logger.addHandler(fh) # self.logger.addHandler(ch) def getlog(self): return self.logger
最后
以上就是秀丽大米最近收集整理的关于解决python使用logging模块出现的重复日志问题的全部内容,更多相关解决python使用logging模块出现内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复