关于解决logging模块写出的日志信息重复的问题
一般情况下,我们在利用logging模块记录日志的时候,往往会利用下面这种方式进行日志信息的记录:
import logging def logger_file(): #生成logger对象 whw_logger = logging.getLogger('whw.log') whw_logger.setLevel(logging.INFO) #生成handler对象 whw_fh = logging.FileHandler('whw.log') whw_fh.setLevel(logging.INFO) #生成Formatter对象 file_formatter = logging.Formatter(' %(asctime)s - %(name)s - %(levelname)s - %(message)s ') #把formatter对象绑定到handler对象中 whw_fh.setFormatter(file_formatter) # 把handler对象绑定到logger对象中 whw_logger.addHandler(whw_fh) return whw_logger if __name__ == '__main__': while 1: s = input('请输入日志信息:') logger_file().info(s)
生成的log日志里总会出现重复的同一条信息:
我们可以再写一个方法,将写好的信息处理一下:
def write_log(msg): log_obj = logger_file() log_obj.info(msg) log_obj.handlers.pop()
这样,完整的代码如下:
import logging def logger_file(): #生成logger对象 whw_logger = logging.getLogger('whw.log') whw_logger.setLevel(logging.INFO) #生成handler对象 whw_fh = logging.FileHandler('whw.log') whw_fh.setLevel(logging.INFO) #生成Formatter对象 file_formatter = logging.Formatter(' %(asctime)s - %(name)s - %(levelname)s - %(message)s ') #把formatter对象绑定到handler对象中 whw_fh.setFormatter(file_formatter) # 把handler对象绑定到logger对象中 whw_logger.addHandler(whw_fh) return whw_logger def write_log(msg): log_obj = logger_file() log_obj.info(msg) log_obj.handlers.pop() if __name__ == '__main__': while 1: s = input('请输入日志信息:') write_log(s)
对于同样的输入,我们得到的结果就没有了重复信息: