Приложение Java запускается в контейнере k8s и записывает сообщения журнала на stdout со следующим приложением:
<Appenders>
<Console name = "Console" target = "SYSTEM_OUT">
<JsonLayout compact = "true" eventEol = "true" />
</Console>
</Appenders>
для сбора fluentd и передачи в ELK.
Я не разработчик Java, но мне интересно, могу ли я как-нибудь избавиться от трассировки стека Java Exception in thread "main" ... в stdout после обычной записи журнала log4j2, содержащей то же сообщение в JSON.
Да, я имею в виду сценарий, когда java-процесс завершается с ошибкой и завершается. В этом случае он печатает строку с ошибкой в JsonLayout и трассировку стека сразу после нее.
Перехватите исключение и обработайте его по мере необходимости. Вы бы получили лучшие предложения, если бы предоставили Минимальный, полный и проверяемый пример
@ Д. как я уже сказал, я не разработчик Java, поэтому я ничего не могу сделать с кодом самостоятельно, может быть, просто отредактирую XML или добавлю образец кода путем копирования и вставки. Но все равно спасибо за предложение.




Попробуйте ниже конфигурацию -
<Appenders>
<Console name = "Console" target = "SYSTEM_OUT">
<JsonLayout compact = "true" eventEol = "true" includeStacktrace = "false" />
</Console>
</Appenders>
С includeStacktrace=false будут регистрироваться только имя класса и сообщение Throwable. Полная трассировка стека исключения не регистрируется. Узнать подробнее здесь
Спасибо за предложение, чувак, но похоже, что он просто удалит трассировку стека из записи журнала json. Кроме того, он не позволяет мне использовать эту опцию: ERROR JsonLayout contains an invalid element or attribute "includeStacktrace"
@ cardinal-gray Я добавил подробности и ссылку в приведенном выше ответе. Если вы получаете сообщение об ошибке для этого атрибута, похоже, ваш log4j2 более ранней версии.
Вы правы, это было на 2.3 версии log4j. Тем не менее, он продолжает печатать полную трассировку стека, отличную от JSON, после строки с ошибкой в формате JSON. Хотя строка в формате JSON не содержит сообщения полной трассировки стека (например, at ... (Connection.java:287)).
Я думаю, что сообщение
Exception in thread "main" ...появляется, когда в приложении возникает исключение, и оно не было обнаружено в приложении. В таком случае приложение будет остановлено. Вы говорите об этом сценарии? ИЛИ можете ли вы поделиться более подробной информацией о том, что именно вы хотите удалить.