LogMX 正则表达式解析器的问题

Posted

技术标签:

【中文标题】LogMX 正则表达式解析器的问题【英文标题】:Issue with LogMX Regular Expression Parser 【发布时间】:2014-06-23 19:21:58 【问题描述】:

我们正在使用 LogMX 日志查看器来监控我们的应用程序日志,使用正则表达式解析器。

每次日志消息包含“-”字符时,LogMX 都不会按预期解析日志事件。

例如以下日志事件:

[ERROR] | com.nsoft.gmonitor.Controller - File Loader - Error while loading file "C:\GMonitor\prefs.properties - Copy"

被解析为:

发射器:com.nsoft.gmonitor.Controller - File Loader

线程:Error while loading file "C:\GMonitor\prefs.properties

消息:- Copy"

代替:

发射器:com.nsoft.gmonitor.Controller

线程:File Loader

消息:Error while loading file "C:\GMonitor\prefs.properties- Copy"

我们正在使用以下正则表达式:

\[(.*)\] \| (.*) - (.*) - (.*)

感谢您的帮助。

【问题讨论】:

【参考方案1】:

你应该改用这个正则表达式:

\[(.*)\] \| (.*?) - (.*?) - (.*)

我刚刚在.* 之后为“发射器”和“线程”字段/组添加了一个? 字符。 这是一个常见的正则表达式问题(不特定于 LogMX):

.* 被称为 greedy 量词:表示它将尝试匹配最大字符数

.*?被称为不情愿量词:表示它会尽量匹配最少字符数

您可以在JDK API(搜索“贪婪”)或LogMX docs 中了解更多信息。

PS:如果您不想使用正则表达式来解析 LogMX 中的日志,您可以改用它的“Log4j/Logback 模式解析器”:模式 [%p] | %c - %t - %m 将符合您的需要,并且默认情况下是不情愿的默认为所有字段/组。

【讨论】:

【参考方案2】:

那是因为你的正则表达式是贪婪的。尝试将? 添加到您的群组以避免正则表达式贪婪。

看看这个:

\[.*\] .? (.*?) - (.*?) - (.*)

Debuggex Demo

在这里您可以看到存储在组中的正确值:

【讨论】:

以上是关于LogMX 正则表达式解析器的问题的主要内容,如果未能解决你的问题,请参考以下文章

是否有正则表达式的通用/标准子集?

jmeter后置处理器,正则表达式提取器的使用

CSS 正则表达式 id 选择器与类选择器的性能

scikit-learn 文本矢量化器的正则表达式/“token_pattern”

jmeter 学习笔记

jmeter 学习笔记