与copilot 结对编程系列 - log日志重复性检测 - 第1篇 - 总体介绍及效果展示

背景

代码总是难免会存在bug,对于如何定位bug方法有很多种,最常规的手段就是添加log日志,但是log日志也是一把双刃剑。
优点

  • log时机加的好,加的准确好,可以提前发现bug减少维护的工作量。

缺点

  • 加的时机不好,或者被滥用,一方面增加系统开销,另一方面对于定位问题也存在很大干扰,真正有效的log可能会被海量的无效重复log所淹没,导致定位问题好比是大海捞针。

如何维护好log日志,解决方法需要从多个角度:

  • 需要增加代码提交时的code review
  • 需要定义好log日志打印规则
  • 通过case去反向审查log提高准确性

本文旨在通过脚本检测代码sct case log (System Compatibility Test case)主要用于系统模块级别的测试)日志中的重复逻辑(比如N行以内的重复打印),并将检测结果存储到数据库. 通过网页UI界面展示, 方便进行数据查询和可视化, 并可以保存到Excel以便于后续分析和查询。

整体流程

先讲一下整体流程, 大致分为以下几个部分:

  1. 数据获取 - sct log读取
  2. 数据分析 - 提取重复log
  3. 数据存储 - 构建数据库并存储
  4. 在线数据查询 - 网页UI查询
  5. 离线数据分析 - Excel 数据存储

目录结构

project/
│
├── repeated_log_check.py      # 主函数脚本,包含重复代码检测逻辑
├── database_storage.py          # 数据存储逻辑,支持灵活的参数调试和查询
├── database_query.py                # 灵活数据查询接口定义,便于后续分析
├── ui_interface.py                   # 网页UI界面生成
├── templates
│   ├── index.html                    # 数据库查询参数输入
│   └── result.html                   # 数据库查询结果输出
└── README.md                     # 项目介绍文档


具体步骤

数据获取

主要目的是得到需要分析的数据的log日志文件路径的信息,如果本身这个不存在,那还需要自己运行下才能得到(这不是本文重点就不展开了),当前的数据来源都是基于某个定时运行的脚本生成的log日志(后期还可以通过历史版本比较,监控重复日志的产生和提醒)。

  • 根据log日志目录结构,定位准确的log文件
  • 根据文件大小和数量,选择文件读写的策略
数据分析

首先是对现有的log进行人工分析,为后续分析提供参考。

  • 明确一个log日志文件所带有的信息,比如case name,为后续查询做准备
  • 明确一条log日志的组成,比如时间戳,模块名,log levellog typelog info等,为重复分析做预处理
  • 明确重复log的定义,定好重复log检测的策略
  • 明确好存储的数据结构,为后续高效数据库存储和查询做准备
数据存储

主要是对于生成的数据采用什么数据库存储,采用什么存储策略,比如事务,批量存储,并发等等

  • 基于当前的需求业务,挑选合适数据库
  • 基于当前的数据类型,挑选合适的数据库存储方式
数据查询

主要目的是为了如果展示分析得到的数据。
首先是定义好数据库查询函数,如果从多角度展示,比如关注特定log level的log,关注特定模块产生的log,关注特定流程产生的log等等。
然后是怎么展示,是使用命令行界面查询还是网页查询。

  • 命令行界面
    优点:实现简单,扩展性强,透明程度高
    缺点:操作复杂,对用户有更高要求,数据显示可能不会那么直观

  • 网页查询
    优点:用户友好,可以实现黑盒查询,用户只要需要根据界面提示,就可以按照自己需求查询
    缺点:实现复杂,对于查询的接口相对固化,要增加比较麻烦(主要是我完全不懂,不过有了cpoilot这个编程助手,功能实现似乎不是问题)

最后比较之后还是选择了网页查询,毕竟用户至上嘛,没有用户,功能也没有用武之地.

查询接口

提供数据查询接口, 当前设计了6种查询方式

  • single sct case: 单个case存在多少重复log及其次数
  • top sct cases: 按照重复log的次数的case排名
  • log type ranking: log 类型有哪些及其次数排名
  • top logs: log总次数排名
  • specific log: 特定log在哪些case中存在及次数
  • specific log type: 特定某类log的次数排名
    query insterface
表格数据展示

把数据按照表格的形式显示出来, 提供多种形式排序.
在这里插入图片描述

可视化图表

有时候表格不一定直观, 增加课饼图作为补充显示.
在这里插入图片描述

excel 数据存储

提供一键excel格式导出功能, 检测结果存储到Excel表格中,便于后续分析和参考。
excel export

最后

下一篇讲实现细节: 与copilot 结对编程系列 - log日志重复性检测 - 第2篇 - 重复log检测框架解析
有兴趣, 需要源码可以关注我的公众号, 代码的更多细节, 一起交流~~~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御风之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值