我们正在使用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"
我们正在使用以下正则表达式:
\[(.*)\] \| (.*) - (.*) - (.*)
感谢您的帮助。
答案 0 :(得分:4)
您应该使用此正则表达式:
\[(.*)\] \| (.*?) - (.*?) - (.*)
我刚刚在?
之后添加了一个.*
字符,用于发送者'和'线程'域/组。
这是一个常见的正则表达式问题(不是特定于LogMX):
.*
被称为贪心量词:它意味着它会尝试匹配最大字符数
.*?
被称为不情愿的量词:这意味着它会尝试匹配最少的字符数
您可以在JDK API(搜索'贪婪')或LogMX docs中详细了解相关信息。
PS:如果你不想使用正则表达式来解析LogMX中的日志,你可以使用它的" Log4j / Logback模式Parsers"相反:模式[%p] | %c - %t - %m
将符合您的需要,默认情况下默认情况下对所有字段/组都不情愿。
答案 1 :(得分:2)
那是因为你的正则表达式是贪婪的。尝试将?
添加到您的论坛以避免正则表达式贪婪。
看一下这个:
\[.*\] .? (.*?) - (.*?) - (.*)
在这里,您可以看到存储在组中的正确值: