文档地址:https://www.elastic.co/guide/en/beats/filebeat/6.3/_examples_of_multiline_configuration.html
(对,我知道是旧文档,因为新文档里完全改写——实际上是缩写了这个页面)
在匹配 Java 堆栈报错日志的时候,官方文档建议的正则式是
正则式 ↓:
'^[[:space:]]+(at|\.{3})\b|^Caused by:'
那么按照文档,去 https://regex101.com/
使用 Go 语言匹配模式测试一下
匹配文 ↓:(照顾页面美观缩短了一下)
at org.mybatis.sping.invoke(SqlSessionTemplate.java:433) ~[mybatis-spring-1.3.2.jar!/:1.3.2]
... 89 more
测试结果: https://i.imgur.com/2JoxHXy.png
明显最后那行是没匹配上的。
变换着正则模式捣鼓了一小会儿(我正则几乎 0 基础,结论可能有错),疑似是 "..." 与它和 "89" 之间的空格同为符号(非单词),不能正确被 "\b" 识别与切割,因为去掉 "\b" 后,这条正则是可以工作的。
那么按照我的理解,这条正则的正确写法应该是 ↓:
^[[:space:]]+(at)\b|(\.{3})\B|^Caused by:
不过这么写,根据测试,匹配速度会在原公式的基础上慢到翻倍,因为要适配两个 Group。如果直接去掉 "\b" 的话匹配上看起来没问题,没有丢文本(不敢确定),速度也是正常速度。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.