Обычно большинство разработчиков используют свои собственные каркасы журналирования во время разработки, и это вынуждает организации поддерживать конфигурацию для каждой каркаса журналирования. Обычно переход с уровня ведения журнала с 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>