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

痛点

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

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

手写脚本

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

1
tail -f /etc/log/test/foo.log | grep -E -B8 -A11 'test\(测试\)foo bar' --line-buffered | perl -pe 's/(test\(测试\))|(foo)/\e[1;31m$1\e[1;32m$2\e[0m/g'

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

脚本说明

需要高亮的关键字:

1
2
test (测试)
foo

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

需要高亮的关键字颜色:

1
2
\e[1;31m$1
\e[1;32m$2

注意:$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日
许可协议