Статьи

SLF4J с выходом из системы

Обычно большинство разработчиков используют свои собственные каркасы журналирования во время разработки, и это вынуждает организации поддерживать конфигурацию для каждой каркаса журналирования. Обычно переход с уровня ведения журнала с DEBUG на INFO иногда требует перезапуска приложения в производственной среде. SLF4J — это новейший фасад ведения журналов, который позволяет подключить желаемую среду ведения журналов во время развертывания. Далее в статье рассказывается об использовании SLF4J с logback. 

SLF4J — Simple Logging Facade для Java API помогает подключить желаемую реализацию ведения журнала во время развертывания.

Logback — помогает изменить конфигурацию регистрации через JMX во время выполнения без перезапуска ваших приложений в работе.

Я надеюсь, что эта статья поможет получить общий обзор SLF4J / Logback и перенести существующие приложения в общий подход к ведению журнала.  

SLF4J

Это простой фасад ведения журнала, позволяющий абстрагировать различные структуры ведения журналов, такие как logback, log4j, commons-logging и реализация ведения журнала java по умолчанию (java.util.logging). Это в первую очередь позволяет пользователю включать желаемую структуру ведения журналов во время развертывания. Он легкий и практически не увеличивает производительность.

Обратите внимание, что SLF4j не заменяет какую-либо структуру журналирования; это просто фасад вокруг любой стандартной системы каротажа. Если slf4j не находит какую-либо рамку регистрации в classpath, по умолчанию он печатает журналы в консоли.

Logback

Это улучшенная версия log4j и изначально поддерживает slf4j, поэтому миграция из других каркасов ведения журналов, таких как log4j и java.util.logging, вполне возможна.

Поскольку logback изначально поддерживает slf4j, комбинация использования slf4j с этим фреймворком относительно быстрее, чем slf4j с другими фреймворками журналирования. Конфигурирование регистрации может быть выполнено в формате xml или groovy .

* Одна важная особенность заключается в том, что она предоставляет конфигурацию через JMX, следовательно, конфигурация (отладка для информации и т. Д.) Может быть изменена через консоль JMX без перезапуска приложения.

Кроме того, он печатает версию артефакта как часть трассировки стека исключений, которая может быть полезна для отладки.

java.lang.NullPointerException: null

  at com.fimt.poc.LoggingSample.<init>(LoggingSample.java:16) [classes/:na]

  at com.fimt.poc.LoggingSample.main(LoggingSample.java:23) [fimt-logging-poc-1.0.jar/:1.0]

** Причины предпочитать logback, а не log4j хорошо объяснены здесь

Использование API SLF4J в Java-классах

(1)   Импортируйте Logger и LoggerFactory из пакета org.slf4j

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

(2)  Объявите класс регистратора как,

private final Logger logger = LoggerFactory.getLogger(LoggingSample.class);

(3)  Используйте отладку, предупреждение, информацию, ошибку и трассировку с соответствующими параметрами. Все методы по умолчанию принимают строку в качестве входных данных.

logger.info("This is sample info statement");

SLF4J с выходом из системы

Включите следующую зависимость pom.xml, она вытягивает свои зависимости logback-core и slf4j-api в дополнение к logback-classic

<dependency>

  <groupId>ch.qos.logback</groupId>

  <artifactId>logback-classic</artifactId>

  <version>1.0.7</version>

  </dependency>

SLF4J может использоваться с существующими журналами framworks log4j, common-logging и java.util.logging (JUL). Обязательные зависимости указаны ниже.

SLF4J с Log4j

Включите следующую зависимость pom.xml, она вытягивает свои зависимости log4jand slf4j-api в дополнение к артефакту slf4j-log4j12.

<dependency>

  <groupId>org.slf4j</groupId>

  <artifactId>slf4j-log4j12</artifactId>

  <version>1.7.2</version>

  </dependency>

SLF4J с JUL (java.util.logging)

Включите следующую зависимость pom.xml, она вытягивает свою зависимость slf4j-api в дополнение к артефакту slf4j-jdk14.

<dependency>

  <groupId>org.slf4j</groupId>

  <artifactId>slf4j-jdk14</artifactId>

  <version>1.7.2</version>

  </dependency>

Миграция существующих проектов, ведение журнала в каркас обратного входа

Шаг: 1 — Обновить существующий проект pom.xml

Добавьте правильную зависимость, упомянутую выше. Также удалите неиспользуемые зависимости log4j / commons.

Шаг 2: Обновите Java-файлы с помощью SLF4J API.

Сканируйте все файлы Java и замените классы log4j или java.util.logging на классы API SLF4J. Это можно сделать с помощью инструмента java -jar slf4j-migrator-1.7.2.jar. Подробная документация и ограничения указаны  здесь

Этот инструмент заменяет API регистрации log4j, commons-logging и java.util.logging в классах API SLF4J.

Шаг 3: конвертируйте log4j.properties в logback.xml

Logback предоставляет онлайн- переводчик, который преобразует свойства log4j в logback.xml 

File Appenders:

Как и другие каркасы журналирования, реализация logback также поддерживает различные файловые приложения.

Ежедневная подача файлов:

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  <FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>

  <!-- keep 30 days' worth of history -->

  <maxHistory>30</maxHistory>

</rollingPolicy>

Свернуть файлы журнала в зависимости от размера:

<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">

  <fileNamePattern>tests.%i.log.zip</fileNamePattern>

  <minIndex>1</minIndex>

  <maxIndex>10</maxIndex>

</rollingPolicy>

<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

  <maxFileSize>5MB</maxFileSize>

</triggeringPolicy>

раскладка

<layout class="ch.qos.logback.classic.PatternLayout">

  <Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>

</layout>