slf4j
библиотеки slf4j
качестве уровня API ведения журнала приложений Java дает много преимуществ. Здесь я покажу несколько примеров того, как использовать и настраивать различные регистраторы.
Вы можете думать о slf4j
как о Java-интерфейсе, и тогда вам потребуется реализация (ТОЛЬКО ОДИН) во время выполнения, чтобы предоставить фактические подробности регистрации, такие как запись в STDOUT или в файл и т. Д. Каждая реализация регистрации (или называемая привязка) будет очевидно, у них есть свой собственный способ настройки вывода журнала, но ваше приложение останется независимым и всегда будет использовать тот же API org.slf4j.Logger
. Посмотрим, как это работает на практике.
Использование slf4j
с Simple logger
Создайте проект на основе Maven, и это в вашем pom.xml
.
1
2
3
4
5
|
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version> 1.7 . 5 </version> </dependency> |
Теперь вы можете использовать Logger
в своем Java-коде следующим образом.
01
02
03
04
05
06
07
08
09
10
11
12
|
package deng; import org.slf4j.*; public class Hello { static Logger LOGGER = LoggerFactory.getLogger(Hello. class ); public static void main(String[] args) { for ( int i = 0 ; i < 10 ; i++) if (i % 2 == 0 ) LOGGER.info( "Hello {}" , i); else LOGGER.debug( "I am on index {}" , i); } } |
Выше будет скомпилирована ваша программа, но когда вы запустите ее, вы увидите эти результаты.
1
2
3
4
|
bash> java deng.Hello SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder" . SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http: //www.slf4j.org/codes.html#StaticLoggerBinder for further details. |
Это говорит о том, что во время выполнения вы пропускаете «реализацию» ведения журнала (или привязку средства ведения журнала), поэтому slf4j
просто использует slf4j
«NOP», которая ничего не делает. Чтобы правильно увидеть вывод, вы можете попробовать использовать простую реализацию, которая вообще не требует никакой настройки! Просто вернитесь к вашему pom.xml
и добавьте следующее:
1
2
3
4
5
|
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version> 1.7 . 5 </version> </dependency> |
Теперь вы видите запись журнала на STDOUT с уровнем INFO. Этот простой регистратор по умолчанию покажет любое сообщение уровня INFO или выше. Чтобы увидеть сообщения DEBUG, вам нужно передать это системное свойство -Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG
при запуске Java.
Использование slf4j
с Log4j logger
Теперь мы можем поэкспериментировать и поменять местами разные реализации логгера, но код вашего приложения может остаться прежним. Все, что нам нужно, это не заменить slf4j-simple
другой популярной реализацией логгера, такой как Log4j.
1
2
3
4
5
|
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version> 1.7 . 5 </version> </dependency> |
Опять же, мы должны настроить ведение журнала для каждой выбранной реализации. В этом случае нам нужен файл src/main/resources/log4j.properties
.
1
2
3
4
5
|
log4j.rootLogger=DEBUG, STDOUT log4j.logger.deng=INFO log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n |
Перезапустите вашу программу, и вы должны увидеть аналогичные результаты.
Использование slf4j
с JDK logger
JDK на самом деле поставляется с пакетом logger, и вы можете заменить pom.xml
этой реализацией logger.
1
2
3
4
5
|
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <version> 1.7 . 5 </version> </dependency> |
Теперь с конфигурацией для ведения журнала JDK немного сложно работать. Не только нужен файл конфигурации, такой как src/main/resources/logging.properties
, но также необходимо добавить системные свойства -Djava.util.logging.config.file=logging.properties
, чтобы он мог его выбрать. вверх. Вот пример для начала:
Уровень = INFO
1
2
3
|
handlers=java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level=FINEST deng.level=FINEST |
Использование slf4j
с Logback Logger
Реализация logback logger является реализацией супер дупа качества. Если вы намереваетесь написать серьезный код, который будет запущен в производство, вы можете оценить эту опцию. Снова измените ваш pom.xml
чтобы заменить на это:
1
2
3
4
5
|
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version> 1.0 . 13 </version> </dependency> |
Вот пример конфигурации src/main/resources/logback.xml
для начала работы.
1
2
3
4
5
6
|
<configuration> <appender name= "STDOUT" class = "ch.qos.logback.core.ConsoleAppender" > <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{ 36 } - %msg%n</pattern> </encoder> </appender> |
1
|
<logger name= "deng" level= "DEBUG" /> |
1
2
3
4
|
<root level= "INFO" > <appender-ref ref= "STDOUT" /> </root> </configuration> |
Написание собственной библиотеки с slf4j
регистратора slf4j
Если вы предоставляете библиотеку Java для большого потребления конечными пользователями, slf4j-api
установить для вашего проекта зависимость только от slf4j-api
, а затем позволить своему пользователю выбрать любую реализацию средства slf4j-api
журнала в своей среде разработки или среде выполнения. Как конечные пользователи, они могут быстро выбрать один из указанных выше вариантов и воспользоваться своими любимыми функциями реализации ведения журналов.
Ресурсы
- http://slf4j.org/
- http://logging.apache.org/log4j/1.2/
- http://docs.oracle.com/javase/7/docs/technotes/guides/logging/
- http://logback.qos.ch/