zoukankan      html  css  js  c++  java
  • logging日志重复打印问题

    在做接口自动化,使用logging模块打印日志时,遇到一个坑:第一次调用打印一次,第二次调用打印两次,第三次调用打印三次。。。

    修改前:

    def log(msg):
    
        logger = logging.getLogger("App")
        handler = logging.FileHandler('test.log')
    
        logger.setLevel(logging.INFO)                #设置日志等级
        # 日志输出格式
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        # 输入到控制台
        console = logging.StreamHandler()
        console.setLevel(logging.INFO)
    
        logger.addHandler(handler)
        logger.addHandler(console)
    
        logger.info(msg)

    一开始以为是logging.getLogger()多次实例化的问题,于是乎对logging.getLogger()写了一个单例,但是问题仍然没有解决。

    原来logging的打印是由handler进行处理的,第一次调用时添加了handler,第二次调用又添加了一个handler,所以,这个logger里有了两个同样的handler,以此类推,调用几次就会有几个handler。。。

    解决办法:打印日志后,通过removeHandler()将处理器移除掉。

    修改后:

    def log(msg):
    
        logger = logging.getLogger("App")
        handler = logging.FileHandler('test.log')
    
        logger.setLevel(logging.INFO)                #设置日志等级
        # 日志输出格式
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        # 输入到控制台
        console = logging.StreamHandler()
        console.setLevel(logging.INFO)
    
        logger.addHandler(handler)
        logger.addHandler(console)
    
        logger.info(msg)
        #移除处理器
        logger.removeHandler(handler)
        logger.removeHandler(console)
    

      

  • 相关阅读:
    2018.5.22 Oracle安装配置在虚拟机中外部电脑连接服务
    2018.5.20 oracle强化练习
    2018.5.19 Oracle数据操作和管理表的综合练习
    2018.5.18 AndroidStudio创建项目出错
    2018.5.17 oracle函数查询
    2018.5.14 XML文档类型定义----DTD
    2018.5.13 oracle遇到的问题
    二元搜索算法(分治法)
    循环队列(弥补队列顺序储存的不足)
    队列的顺序储存
  • 原文地址:https://www.cnblogs.com/yetj/p/10750506.html
Copyright © 2011-2022 走看看