Можно было бы подумать, что журналы приложений Java приходят только в одной форме, но мой опыт показывает, что часто тонкие различия. Иногда имя потока находится в квадратных скобках, а иногда и в круглых скобках, иногда имя потока идет первым и другими моментами после имени регистратора и так далее. Это становится более болезненным, когда вы пытаетесь разобрать более одного типа журнала.
Вместо того, чтобы взаимодействовать с различными фильтрами для объединения многострочных сообщений и поискать все поля, я настоятельно рекомендую использовать макет Log4j в github.com/logstash/log4j-jsonevent-layout для создания журналов на основе JSON, которые Logstash может читать напрямую без каких-либо фильтров. Помимо того, что вам не нужно поддерживать фильтры, вы получаете все поля из каждого события журнала. Так как я не знаю, что ваш catalina.log выглядит, я не могу сказать, что вам не хватит, анализируя его содержимое вместо использования раскладки JSON.
Недостатком является то, что он немного более эффективен в развертывании. Вам, очевидно, придется развернуть файл jar-файла самого макета, но у него есть несколько собственных зависимостей (net.minidev: jsonsmart и commons-lang: commons-lang), которые вам тоже нужно сделать.