Дубликат трассировки стека ошибок Java после записи JsonLayout

Приложение 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.

Я думаю, что сообщение Exception in thread "main" ... появляется, когда в приложении возникает исключение, и оно не было обнаружено в приложении. В таком случае приложение будет остановлено. Вы говорите об этом сценарии? ИЛИ можете ли вы поделиться более подробной информацией о том, что именно вы хотите удалить.

Vikas Sachdeva 01.06.2018 09:27

Да, я имею в виду сценарий, когда java-процесс завершается с ошибкой и завершается. В этом случае он печатает строку с ошибкой в ​​JsonLayout и трассировку стека сразу после нее.

cardinal-gray 01.06.2018 16:23

Перехватите исключение и обработайте его по мере необходимости. Вы бы получили лучшие предложения, если бы предоставили Минимальный, полный и проверяемый пример

D.B. 02.06.2018 02:49

@ Д. как я уже сказал, я не разработчик Java, поэтому я ничего не могу сделать с кодом самостоятельно, может быть, просто отредактирую XML или добавлю образец кода путем копирования и вставки. Но все равно спасибо за предложение.

cardinal-gray 04.06.2018 08:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
321
1

Ответы 1

Попробуйте ниже конфигурацию -

<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 04.06.2018 09:51

@ cardinal-gray Я добавил подробности и ссылку в приведенном выше ответе. Если вы получаете сообщение об ошибке для этого атрибута, похоже, ваш log4j2 более ранней версии.

Vikas Sachdeva 05.06.2018 03:37

Вы правы, это было на 2.3 версии log4j. Тем не менее, он продолжает печатать полную трассировку стека, отличную от JSON, после строки с ошибкой в ​​формате JSON. Хотя строка в формате JSON не содержит сообщения полной трассировки стека (например, at ... (Connection.java:287)).

cardinal-gray 05.06.2018 09:17

Другие вопросы по теме