Проблема с анализатором регулярных выражений LogMX
Мы используем LogMX Viewer для просмотра журналов наших приложений, используя анализатор регулярных выражений.
Каждый раз, когда сообщение журнала содержит символ "-", 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 ответа
Вы должны использовать это регулярное выражение вместо:
\[(.*)\] \| (.*?) - (.*?) - (.*)
Я просто добавил ?
символ после .*
для полей / групп "Emitter" и "Thread". Это распространенная проблема регулярных выражений (не относится только к LogMX):
.*
называется жадным квантификатором: это означает, что он будет пытаться сопоставить максимальное количество символов.*?
называется неохотным квантификатором: это означает, что он будет пытаться соответствовать минимальному количеству символов
Вы можете прочитать больше об этом в JDK API (поиск "жадный") или в документации по LogMX.
PS: если вы не хотите использовать регулярные выражения для анализа ваших журналов в LogMX, вы можете вместо этого использовать его "Log4j/Logback pattern Parser": шаблон [%p] | %c - %t - %m
будет соответствовать вашим потребностям, и по умолчанию неохотно для всех полей / групп.
Это потому, что ваше регулярное выражение является жадным. Попробуйте добавить ?
в ваши группы, чтобы избежать регулярных выражений жадности.
Посмотрите на это:
\[.*\] .? (.*?) - (.*?) - (.*)
Здесь вы можете увидеть правильные значения, хранящиеся в группах: