开发者社区> 问答> 正文

OpenSearch sdk重复打印大量日志无法关闭

通过SDK进行搜索/推送更新商品后会不停的打印Http连接关闭日志,尝试过修改logback日志输出级别,无法停止日志 image.png 根据日志内容全局搜索找到四个有相同输出代码的类,但debug模式下发现根本不是这些类输出的,也就是说,无法定位到日志输出地,不知道有没有人遇到相同的情况? 这是SDK自身的问题吗?

展开
收起
夜王同学 2020-11-30 11:32:27 618 0
1 条回答
写回答
取消 提交回答
  • 在做接口自动化,使用logging模块打印日志时,遇到一个坑:第一次调用打印一次,第二次调用打印两次,第三次调用打印三次。。。

    修改前:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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()将处理器移除掉。

    修改后:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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)
    

      

    2021-02-09 16:15:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载