Java: Свертывание Многострочных Журналов В Однострочный С Помощью Spring И Средства Ведения Журнала Logback Или Log4J2.

Logback и Log4j2 — одни из самых известных фреймворков ведения журналов в JAVA. Платформа Logback используется только вместе с библиотекой SLF4J, которая представляет собой интерфейс для систем регистрации событий.

Log4j2 — это вторая, улучшенная версия средства ведения журнала Log4, библиотеки ведения журналов, которая разделяет API и реализацию, позволяя использовать API Log4j 2 в сочетании с реализацией другого средства ведения журнала.

Spring Music — это приложение для использования службы базы данных платформы Cloud Foundry в сочетании с Spring Framework и Spring Boot. Он предназначен для хранения одних и тех же объектов домена в одном из множества различных хранилищ — объектно-реляционном, документно-ориентированном или распределенном (хранилище «ключ-значение»).



Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Два наиболее распространенных средства ведения журнала, используемые вместе с Spring/Spring Boot, — это Logback и Log4j2. До недавнего времени разработчик имел большую свободу действий относительно формата логов и самих файлов, используемых для логирования.

Однако в современном мире внедрения и масштабирования контейнеров ведение журналов обычно предлагает корпоративные решения, требующие определенного уровня стандартизации.

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

Из-за этого вместо одного события журнала, указывающего на исключение или сообщение об ошибке, вы получаете более 100 различных журналов, по одному на каждую строку трассировки стека, перемежающихся другими событиями журнала, поступающими от других служб или экземпляров служб.

В этой статье объясняется, как настроить приложение Spring Boot для свертывания исключений в одну строку как для средства ведения журнала Logback, так и для средства ведения журнала Log4j2. Это позволяет рассматривать журнал исключений и трассировку стека как один журнал событий.



Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Классы ошибок и исключений в JAVA

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Установленные и снятые отметки Непроверенные исключения Исключение в JAVA



Приложение «Весенняя музыка»

В этой статье используется специальная версия приложения для специализированного ведения журналов.

весенняя музыка , необходимый для работы логгеров Logback и Log4j2. Сначала нам нужно убедиться, что мы можем воссоздать его из источника.

Для проекта требуется Java8, поэтому первым шагом будет установка Java8 на ваш хост Ubuntu.

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Затем берем исходный код проекта из github и создадим сборку с помощью встроенных скриптов системы сборки Gradle:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.



Свертывание многострочных исключений с помощью Logback

Давайте двинемся дальше и создадим архив проекта Java jar с реализацией логгера Logback с помощью стандартной команды Gradle:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Файл build/libs/spring-music.jar является самоисполняющимся и содержит встроенный Tomcat, привязанный к localhost:8080. Файл jar вызывается с помощью команды:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Вызов http://localhost:8080 Браузер покажет вам страницу со списком Альбомов, а в консоли отобразится строка журнала, имеющая такой вид:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Этот синтаксис строки журнала определен в « src/main/resources/logback-spring.xml » с использованием пользовательского шаблона:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Переменные ${.

} извлекаются из свойств application.properties и системных свойств, которые можно просмотреть на странице по адресу http://localhost:8080/env .

Однако нужная нам часть кода находится сразу после сообщения (%m).



Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Слово «MULTIEXCEPTION» не имеет какого-либо специального значения, это просто уникальный строковый маркер, который позволяет нам узнать, где заканчивается сообщение (%m) и начинается исключение.

Если хотите, можете оставить этот маркер.

Далее, вместо того, чтобы просто вставлять заполнитель %xException, который выводит большую трассировку стека с символами новой строки, мы преобразуем значение с помощью функции %replace и заменяем все символы новой строки выражением «\u2028», что Представление разделителя строк в Юникоде .

Удаление символов «\n» из трассировки стека означает, что трассировка стека теперь будет отправляться в виде одной строки.

Чтобы доказать это, перейдите по ссылке http://localhost:8080/errors/throw , где доступно Контроллер ошибок который намеренно генерирует исключение NullPointerException со следующим кодом:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

В результате в консоли появится строка журнала, показанная ниже:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Здесь вы можете видеть, что выражение «u2028» отделяет то, что раньше было новой строкой в трассировке стека.

Теперь сообщение об исключении и трассировка стека будут отправляться как одно целое.



Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.



Свертывание многострочных исключений с помощью Log4j2

Чтобы переопределить сценарий сборки по умолчанию и использовать Log4j2 в качестве резервной реализации для данного проекта, вам необходимо использовать файл «build-log4j2.gradle».



Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Файл build/libs/spring-music.jar является самоисполняющимся и использует встроенный Tomcat, привязанный к localhost:8080. Как и в предыдущем примере, jar-файл вызывается с помощью команды:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Вызов http://localhost:8080 при использовании браузера отобразится страница со списком альбомов с выводом строки журнала на консоль, которая выглядит следующим образом:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Этот синтаксис строки журнала определен в « источник/основной/ресурсы/log4j2.xml » с использованием пользовательского шаблона:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Переменные ${.

} извлекаются из свойств application.properties и системных свойств, которые можно просмотреть на странице по адресу http://localhost:8080/env .

Однако нужная нам часть кода находится сразу после сообщения (%m).



Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Слово «MULTIEXCEPTION» не имеет особого значения, это просто выбранный нами уникальный строковый маркер, который позволяет нам узнать, где заканчивается сообщение (%m) и начинается исключение.

Если хочешь, можешь оставить это.

Но затем, вместо того, чтобы просто вставлять заполнитель %xException, который выводит большую трассировку стека с символами новой строки, мы преобразуем значение с помощью функции %replace, которая заменяет все символы новой строки выражением «\u2028», которое является Представление разделителя строк в Юникоде .

Удаление символов «\n» из трассировки стека означает, что трассировка стека теперь будет отправляться в виде одной строки.

Чтобы доказать это, перейдите по ссылке http://localhost:8080/errors/throw , где доступно Контроллер ошибок который намеренно генерирует исключение NullPointerException со следующим кодом:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

В результате в консоли появится строка журнала, показанная ниже:

Java: свертывание многострочных журналов в однострочный с помощью Spring и средства ведения журнала Logback или Log4j2.

Как видите, здесь выражение «u2028» отделяет то, что раньше было новой строкой в трассировке стека.

Теперь сообщение об исключении и трассировка стека будут отправляться как одно целое.



выводы

Возможность свернуть многострочную трассировку стека Java в одну строку означает, что этот метод можно рассматривать как единое централизованное решение для журналирования.

Нет смысла тратить вычислительные и человеческие ресурсы на реконструкцию трассировки стека на стороне назначения с использованием идентификаторов корреляции, больших размеров стека, высокой загрузки ЦП и интеллектуального анализа, когда гораздо эффективнее выполнить такое сокращение на стороне источника.

В этом случае символ Юникода всегда можно заменить на стороне сбора журналов (например, на стороне конвейера сбора журналов, фильтрации и нормализации Logstash), чтобы восстановить сообщение в исходном формате.



Справочный материал



Немного рекламы :)

Спасибо, что остаетесь с нами.

Вам нравятся наши статьи? Хотите увидеть больше интересных материалов? Поддержите нас, разместив заказ или порекомендовав друзьям, облачный VPS для разработчиков от $4,99 , уникальный аналог серверов начального уровня, который мы придумали для вас: Вся правда о VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от 19$ или как правильно раздать сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40 ГБ DDR4).

Dell R730xd в 2 раза дешевле в дата-центре Equinix Tier IV в Амстердаме? Только здесь 2 x Intel TetraDeca-Core Xeon, 2 x E5-2697v3, 2,6 ГГц, 14C, 64 ГБ DDR4, 4 твердотельных накопителя по 960 ГБ, 1 Гбит/с, 100 ТВ от 199 долларов США в Нидерландах! Dell R420 — 2x E5-2430, 2,2 ГГц, 6C, 128 ГБ DDR3, 2 твердотельных накопителя по 960 ГБ, 1 Гбит/с, 100 ТБ — от 99 долларов США! Прочтите об этом Как построить корпоративную инфраструктуру класса, используя серверы Dell R730xd E5-2650 v4 стоимостью 9000 евро за копейки? Теги: #github #программирование #java #log4j2 #Logback #Spring Music

Вместе с данным постом часто просматривают: