如何利用正则表达式提高日志分析效率

1. 为什么要用正则表达式?

正则表达式提供了一套灵活便利的字符串匹配规则,可以说是文本处理领域的瑞士军刀,这里的文本处理当然也包括日志分析。

比如如果要过滤模块A(关键字“moduleA”)的所有错误、失败和异常,采用普通关键字过滤是下面这个流程:

使用关键字"moduleA"过滤出所有模块A的日志 -> 拷贝出结果,再使用关键字"error"过滤出模块A的所有错误 -> 基于第一份拷贝结果,再使用关键字"fail"过滤出模块A的所有错误 -> 基于第一份拷贝结果,再使用关键字"exception"过滤出模块A的所有异常。

很明显,这个流程效率非常低下,也间接导致了开发者对于日志分析,特别是复杂问题的日志分析,产生心理抵触。

而如果采用正则表达式,则是另一番场景:

使用正则表达式"moduleA&(error|fail|exception)"一次性得出所有结果。

简单明了!

2. 如何编写正则表达式

标准正则表达式完整教程可参考这里:正则表达式 – 语法 | 菜鸟教程

对于日志分析场景,常用的如下:

单个普通关键字word
以“或”关系组合的多个关键字(注意|两边不要有空格)word1|word2|word3
模糊匹配(其中.*代表匹配任意字符0次或多次)hel.*rld

部分工具也会提供自己的扩展正则,能够进一步提高效率,比如Tilipa的日志工具,它提供了如下扩展:

“非”逻辑(“!”), 比如查找所有异常,但不包含网络异常exception&!NetworkException
“且”逻辑("&"), 比如查找模块A的错误moduleA&error

3. 如何使用正则表达式

这个要看具体的工具,工具大体分为三类,一类是命令行工具,另一类是桌面工具,最后一类是web工具。

3.1. 先来说命令行工具

常用的日志分析命令行工具且支持正则表达式的有:vim、grep,这些工具即可单独使用,也可组合使用。

vim的使用如下:

首先通过“vim file”打开对应日志文件,其中file是文件路径指向你的日志文件。打开后按下"/", 然后输入正则表达式:

按下确定键后即可执行查找,如果找到多处,可通过按"n"键或者“N”键向前向后切换。

grep的使用格式为:grep -nE “word1|word2” file,其中“word1|word2”为你的正则表达式,file为文件路径。

命令行的优势是足够灵活,如果非常熟悉命令行,可以达到事半功倍的效果;不过,缺点也很明显,主要是两点,一是快速翻页浏览不方便,二是对于新手不友好。

3.2. 再来说桌面工具

支持正则表达式的桌面工具很多,常用的有notepad++、editplus、sublime等,甚至大多数的标准IDE也支持,可以直接使用。就体验来说,notepad++比较好,下面介绍notepad++的正则基本用法。

首先通过“文件->打开”打开日志文件:

 然后通过“ctrl+f”打开搜索框,勾选“正则表达式”,输入关键字,点击“在当前文件中查找”即可:

 搜索结果如下:

 双击结果可以定位到具体的行。

3.3. 最后说下web工具

web工具最大的优势在于,几乎适用所有平台,而且轻量,即搜即用,即用即走,非常契合他的工具属性。已知的用于分析日志的web工具不多,比较有特色的一个是Tilipa日志工具(Tilipa-日志工具),它除了支持标准正则表达式以外,还提供了一些扩展能力,比如支持“且”逻辑和“非”逻辑,下面介绍它的基本用法。

首先通过“文件->打开”或者“alt+shift+o”打开日志文件:

然后通过“文件->过滤”或者“alt+shift+f”打开搜索框,勾选“扩展正则”,输入关键字:

 

确定后过滤结果如下:

 下面贴出一些扩展正则的其他用法:

 

 

 

需要补充一句,Tilipa日志工具还支持超大日志文件,有需求的同学可以试试,体验还行。

4. 常用场景与对应正则表达式汇总

单个关键字过滤word
以"或"关系过滤多个关键字word1|word2|word3
以“且”关系过滤多个关键字(用于过滤一个或多个模块的所有问题)(module1|module2)&(error|fail|exception)
去除干扰项word1&!discard

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值