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

时间:2014-06-23 19:21:58

标签: regex logparser log-viewer logmx

我们正在使用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"

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

您应该使用此正则表达式:

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

我刚刚在?之后添加了一个.*字符,用于发送者'和'线程'域/组。 这是一个常见的正则表达式问题(不是特定于LogMX):

  • .*被称为贪心量词:它意味着它会尝试匹配最大字符数

  • .*?被称为不情愿的量词:这意味着它会尝试匹配最少的字符数

您可以在JDK API(搜索'贪婪')或LogMX docs中详细了解相关信息。

PS:如果你不想使用正则表达式来解析LogMX中的日志,你可以使用它的" Log4j / Logback模式Parsers"相反:模式[%p] | %c - %t - %m将符合您的需要,默认情况下默认情况下对所有字段/组都不情愿。

答案 1 :(得分:2)

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

看一下这个:

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

Regular expression visualization

Debuggex Demo

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

enter image description here