Мой сценарий следующий: у меня есть трассировка стека в качестве входных данных для моего экземпляра Logstash. Так как я использую GELF, вся трассировка стека передается в одном поле и выглядит так (сокращенно):
javax.servlet.ServletException: Something bad happened
at com.example.myproject.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:60)
Caused by: java.lang.IllegalArgumentException
at ...
Caused by: java.lang.NullPointerException
at ...
Чего я хочу достичь, так это захватить оставшуюся часть строки, которая следует за двоеточием последнего «Вызвано» в трассировке стека (здесь: «java.lang.NullPointerException»), чтобы сохранить ее в специальном поле. Для этого я использую следующее регулярное выражение oniguruma:
[\s\S]*\nCaused by:(?<cause>.*)[\s\S]*
Странно то, что это отлично работает с отладчиком grok, но как только я перемещаю регулярное выражение в свою конфигурацию Logstash, он также получает остальную часть трассировки стека ('java.lang.NullPointerException at...'), пропуская символ \n. Может ли это быть ошибкой внутри Logstash или отладчика?
Спасибо за ваши подсказки!
[\s\S]*\nCaused by:(?<cause>[^\r\n]*)[\s\S]*
- person Wiktor Stribiżew   schedule 11.04.2016