关于解决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)

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

 

posted on 2018-05-13 12:57  江湖乄夜雨  阅读(672)  评论(0编辑  收藏  举报