• ggrep让多行日志-无处遁形!


    相信大家都很喜欢用grep指令,查一下项目中有没有出错的,然后通过logid搜索相关出错的日志和一些关键参数,但是在多行日志的情况下就很难处理了,比如okhttp拦截器中分别打印了url,param和response,然后你想统计一下有多少成功的,有多少失败的,发现就比较难了。

    解决这个问题的方法,大多数选择在打印日志的时候做处理,把所需要的日志打印到一个行上,但是可能body中的json有换行,或合并后的日志过长,对阅读性增加了更多挑战。能解决但不优雅!今天给大家推荐一个新的方法,ggrep指令!

    ggrep是group grep的缩写,意思是将数据分组匹配。然后可以通过多个表达式匹配指定的日志数据,使用这个指令,你的日志中需要有logid之类的唯一请求标识,可以通过--group或标准匹配参数--smart-logid进行分组日志。

    ggrep指令安装:
    gitee:

    /bin/bash -c "$(curl -fsSL https://gitee.com/bobby96333/ggrep/raw/main/install.sh)"
    

    or github

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/lingdor/ggrep/HEAD/install.sh)"
    

    or 源码安装

    git clone https://github.com/lingdor/ggrep.git
    go build ./
    sudo cp ggrep /usr/local/bin/
    

    CASE1: 对okhttp的多行数据url,param和response过滤输出:

    ggrep --smart-logid --grep 'OkHttpUtil print: --> POST' --grep 'OkHttpUtil print: {' --grep 'OkHttpUtil print: {"return_code' --orderly-match --color always *.info |head
    

    CASE2 对多行日志进行并行,然后可以通过awk,grep,wc等脚本进行二次处理

    ggrep --smart-logid --grep 'OkHttpUtil print: --> POST' --grep 'OkHttpUtil print: {' --grep 'OkHttpUtil print: {"return_code' --orderly-match --merge-lines --color always *.info |head
    

    CASE3 将整组数据打印:

    ggrep --smart-logid -grep 'OkHttpUtil print: --> POST' --print-group *.info |head -n 100
    

    CASE4 并行处理

    ggrep --smart-logid --grep 'LOG1' --grep 'LOG2' --full-match --parallel-count 0 --color always ./demo/demo.log
    

    CASE5 多条件and匹配

    ggrep --smart-logid --grep 'LOG1' --grep 'LOG2' --full-match --color always ./demo/demo.log
    

    输入:

    20240119 LogId[111] LOG1
    20240119 LogId[111] LOG2
    20240119 LogId[111] LOG3
    20240119 LogId[111] LOG2
    50240119 LogId[222] LOG1
    

    输出:

    20240119 LogId[111] LOG1
    20240119 LogId[111] LOG2
    

    ggrep指令参数解读

    --group 可以通过这个参数,正则匹配对日志进行分组处理。
    --smart-logid  ggrep通过logid标识,通俗匹配了大概日志格式,比如LOGID[123],logid: abc123之类,可以简短参数实现日志分组。
    --grep  和grep指令一样,正则匹配内容,正则依据egrep标准,可以实现最简短的匹配指令,高效输出。(这个参数可以重复)
    --M --merge-lines. 合并匹配的行
    --orderly-match -O 通过输入的--grep参数,顺序匹配,顺序和输入--grep参数不一致则不匹配
    --full-match.  --grep全部匹配,则匹配成功
    --print-group   可以通过主个参数,将整组日志打印,在前期问题诊断时非常有用。比如: ggrep --smart-logid --grep '某接口入参' --print-group 
    --color 目前只支持always参数,可以强制搞量匹配内容
    --parallel-count 是并行数,如果给零,则按cpu核数,创建并发。不指定默为1,不开启并发。
    
    
  • 相关阅读:
    Websocket升级版
    褪去流量外衣后,质量问题频现,usmile笑容加困在同质化竞争里
    HIVE和HBASE的区别和联系
    华为云云耀云服务器L实例评测 | 实例使用教学之简单使用:通过命令行管理华为云云耀云服务器
    Ansible playbook简介与初步实战,实现批量机器应用下载与安装
    Linux mdeltree命令教程:详解删除MS-DOS文件系统中的目录及其包含的所有文件和子目录的命令(附实例详解和注意事项)
    小程序v-for与key值使用
    【EP2C35F672C8 EDA试验箱下载】
    【JavaSE】类和对象 【封装、static、代码块、对象的打印】(三)
    微信小程序独立分包与分包预下载
  • 原文地址:https://www.cnblogs.com/a-xu/p/17988596