关于解决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日志里总会出现重复的同一条信息:

关于解决logging模块写出的日志信息重复的问题

关于解决logging模块写出的日志信息重复的问题

  我们可以再写一个方法,将写好的信息处理一下:

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)

  对于同样的输入,我们得到的结果就没有了重复信息:

关于解决logging模块写出的日志信息重复的问题

上一篇:阿里智能工作软件机器人"码栈"应用教程,让一切变得自动化,零基础上手


下一篇:Java堆外内存之六:堆外内存溢出问题排查