多关键字过滤并多色高亮日志内容脚本

痛点

在服务器直接通过 tail 命令滚动输出查看日志内容时,会存在以下的问题:

  • 共用一套测试环境时 ,存在交叉调用的日志内容;
  • 大多Shell工具搜索只能高亮单个关键字;
  • 日志内容杂乱,多个关键字需肉眼定位和比对。

手写脚本

针对上述的问题,可以通过 grep 的多关键字过滤,加上 perl 对指定关键字输出对应的颜色。

1
tail -f /export/log/biz/biz_detail.log | grep -E -B8 -A11 '江苏省联社设备反欺诈预测评分\(标准版\)jar 包入参' --line-buffered | perl -pe 's/(江苏省联社设备反欺诈预测评分\(标准版\))|(数据源中文名:设备信用模型分\(换签版\))|(633004529412624)|(01028898029254162532035)|("1.0")|(bj_score)|(label)|(psce_fraud_jsrcu_score)|(ppre_fraud_jsrcu_label)|(0721d10b33c188d8e45c1369a8b3b01de194a4c9862d486c9d27c3a35845118a)|(hash_type)|(response={tags={)|(jar 包入参)|(sm3)|(8a67f57383173fb1176492184d16d1a4)|(md5)|(5948f86545d42883837ef15e6aa75c5f82c24c25a1bc5de0109b310877afac6d)|(sha256)/\e[1;31m$1\e[1;31m$2\e[1;31m$3\e[1;31m$4\e[1;31m$5\e[1;34m$6\e[1;35m$7\e[1;34m$8\e[1;35m$9\e\e[1;32m$10\e[1;32m$11\e[1;32m$12\e[1;32m$13\e[1;32m$14\e[1;32m$15\e[1;32m$16\e[1;32m$17\e[1;32m$18\e[1;32m$19\e[1;32m$20\e[0m/g'

注意: 空格需要使用反斜线(\)转义

脚本说明

需要高亮的关键字:

1
perl -pe 's/(江苏省联社设备反欺诈预测评分\(标准版\))|(数据源中文名:设备信用模型分\(换签版\))|(633004529412624)|(01028898029254162532035)|("1.0")|(bj_score)|(label)|(psce_fraud_jsrcu_score)|(ppre_fraud_jsrcu_label)|(0721d10b33c188d8e45c1369a8b3b01de194a4c9862d486c9d27c3a35845118a)|(hash_type)|(response={tags={)|(jar 包入参)|(sm3)|(8a67f57383173fb1176492184d16d1a4)|(md5)|(5948f86545d42883837ef15e6aa75c5f82c24c25a1bc5de0109b310877afac6d)|(sha256)

注意:每个括号里的关键字对应下面的$1到$n。

需要高亮的关键字颜色:

1
\e[1;31m$1\e[1;31m$2\e[1;31m$3\e[1;31m$4\e[1;31m$5\e[1;34m$6\e[1;35m$7\e[1;34m$8\e[1;35m$9\e\e[1;32m$10\e[1;32m$11\e[1;32m$12\e[1;32m$13\e[1;32m$14\e[1;32m$15\e[1;32m$16\e[1;32m$17\e[1;32m$18\e[1;32m$19\e[1;32m$20\e[0m/g

注意:$1即匹配关键字的第1个,$2即匹配关键字的第2个,以此类推。$n是根据实际匹配上的顺序定义的。

如果关键字未匹配到,$n的颜色会去匹配第 (n+1) 的关键字。

在Linux终端中,可以使用ANSI转义序列来设置文本的颜色和样式。下面是一些常用的颜色代码:

1
2
3
4
5
6
7
红色:\e[1;31m
绿色:\e[1;32m
黄色:\e[1;33m
蓝色:\e[1;34m
紫色:\e[1;35m
青色:\e[1;36m
白色:\e[1;37m

默认颜色(通常是终端默认的前景和背景颜色):\e[0m

这些颜色代码可以与其他样式代码一起使用,例如:

1
2
3
4
5
粗体:\e[1m
斜体:\e[3m
下划线:\e[4m
反显(文本颜色与背景颜色互换):\e[7m
删除线:\e[9m

使用这些颜色和样式代码,将它们插入到文本之前,在文本之后添加 \e[0m 来恢复默认设置。

比如,将文本设置为红色粗体,可以使用以下代码:

1
\e[1;31m\e[1m这是红色粗体文本\e[0m

这将使文本以红色粗体显示,并在文本后面添加 \e[0m 以恢复默认设置。

生成脚本

上面使用了手动编辑的方式来生成脚本,当修改内容多时容易修改错了,并且高亮颜色值也不容易被记忆住。

所以可以将脚本需要修改的内容提取出来,通过页面配置,并自动生成可用的过滤高亮脚本。

过滤并高亮脚本生成工具

上述的页面中,通过将 6 个变量内容提取出来在页面可视化配置:

  1. 日志地址
  2. 过滤关键字
  3. 上色关键字
  4. 颜色配置

每行匹配1个定义的上色关键字,如果不设置颜色默认是白色:\e[1;37m

  1. 显示过滤关键字前面几行
  2. 显示过滤关键字后面几行

通过页面生成直接能在命令行粘贴使用的脚本,简化了编辑脚本的难度,提高了可用性。体验地址:日志多关键字过滤+高亮脚本生成器[1]

使用效果

在使用脚本后,日志的内容得到了过滤并对特定关键字使用了多色高亮来区分。

使用效果

(本文完)


多关键字过滤并多色高亮日志内容脚本
https://maojun.xyz/blog/2023/09/多关键字过滤并多色高亮日志内容脚本.html
作者
毛 俊
发布于
2023年9月3日
许可协议