Логирую приложение через log4j2, аппендером выступает logstash. Иногда из-за сетевых проблем на машине с logstash или с наплывом логов на него, он отказывается БЫСТРО принимать логи, начинается подвисание, и сообщения из wildfly начинаются скапливаться в очереди log4j2, замедляя работу сервера приложений. В дальнейшем это приводит к OutOfMemory.
Настроил альтернативное логирование в файл, но не могу воспроизвести ошибку когда логстеш недоступен. Когда пищу заранее не верный порт logstash, то log4j сразу понимает о недоступности хоста и пишет в файл.
Как мне настроить аппендер так, чтобы была попытка отправить лог в стеш, и лишь при неудаче отправлять его в файл. Отправка логов по UDP не подходит.
Log4J2 (равно как и Log4J) не поддерживает conditional appender, то есть Appender, который работает по некоему условию. Есть кое-какие костыли, с участием переменных среды, но это в вашем случае не будет работать.
Единственный вариант, который я вижу написать собственный кастомный Appender - это не так сложно как может показаться - надо всего лишь написать своего наследника класса AbstractAppender, который при записи проверяет есть связь с logstash или нет, если нет пишет в FileAppender, если есть то в logstash
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости