В этом уроке мы покажем вам, как использовать Apache Log4j 2 в Spring Boot framework.
Используемые технологии:
- Пружинный ботинок 2.1.2. ВЫПУСК
- Пружина 5.1.4.ОСВОБОЖДЕНИЕ
- Log4j 2.11.1
- Мавен 3
- Java 8
1. Каталог проектов
2. Знаток
Ключ – исключить значение по умолчанию logback
и включить log4j
с пружинный загрузчик-стартер-log4j2
4.0.0 logging-log4j2 jar Spring Boot log4j2 Example https://www.mkyong.com 1.0 org.springframework.boot spring-boot-starter-parent 2.1.2.RELEASE 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-log4j2 com.lmax disruptor 3.4.2 com.fasterxml.jackson.dataformat jackson-dataformat-yaml org.springframework.boot spring-boot-maven-plugin org.apache.maven.plugins maven-surefire-plugin 2.22.0
Отображение зависимостей проекта.
$ mvn dependency:tree [INFO] \- org.springframework.boot:spring-boot-starter-log4j2:jar:2.1.2.RELEASE:compile [INFO] +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.11.1:compile <--- slf4j to log4j bridge [INFO] | \- org.apache.logging.log4j:log4j-api:jar:2.11.1:compile [INFO] +- org.apache.logging.log4j:log4j-core:jar:2.11.1:compile [INFO] +- org.apache.logging.log4j:log4j-jul:jar:2.11.1:compile [INFO] \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
$ mvn dependency:tree [INFO] org.springframework.boot:logging-log4j2:jar:1.0 [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.1.2.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter-json:jar:2.1.2.RELEASE:compile [INFO] | | +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.8:compile [INFO] | | | \- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile [INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.8:compile [INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.8:compile [INFO] | | \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.8:compile [INFO] | +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.1.2.RELEASE:compile [INFO] | | +- org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.14:compile [INFO] | | +- org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.14:compile [INFO] | | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.14:compile [INFO] | +- org.hibernate.validator:hibernate-validator:jar:6.0.14.Final:compile [INFO] | | +- javax.validation:validation-api:jar:2.0.1.Final:compile [INFO] | | +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile [INFO] | | \- com.fasterxml:classmate:jar:1.4.0:compile [INFO] | +- org.springframework:spring-web:jar:5.1.4.RELEASE:compile [INFO] | | \- org.springframework:spring-beans:jar:5.1.4.RELEASE:compile [INFO] | \- org.springframework:spring-webmvc:jar:5.1.4.RELEASE:compile [INFO] | +- org.springframework:spring-aop:jar:5.1.4.RELEASE:compile [INFO] | +- org.springframework:spring-context:jar:5.1.4.RELEASE:compile [INFO] | \- org.springframework:spring-expression:jar:5.1.4.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter-thymeleaf:jar:2.1.2.RELEASE:compile [INFO] | +- org.thymeleaf:thymeleaf-spring5:jar:3.0.11.RELEASE:compile [INFO] | | +- org.thymeleaf:thymeleaf:jar:3.0.11.RELEASE:compile [INFO] | | | +- org.attoparser:attoparser:jar:2.0.5.RELEASE:compile [INFO] | | | \- org.unbescape:unbescape:jar:1.1.6.RELEASE:compile [INFO] | | \- org.slf4j:slf4j-api:jar:1.7.25:compile [INFO] | \- org.thymeleaf.extras:thymeleaf-extras-java8time:jar:3.0.2.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter:jar:2.1.2.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot:jar:2.1.2.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.1.2.RELEASE:compile [INFO] | +- javax.annotation:javax.annotation-api:jar:1.3.2:compile [INFO] | +- org.springframework:spring-core:jar:5.1.4.RELEASE:compile [INFO] | | \- org.springframework:spring-jcl:jar:5.1.4.RELEASE:compile [INFO] | \- org.yaml:snakeyaml:jar:1.23:compile [INFO] +- org.springframework.boot:spring-boot-starter-log4j2:jar:2.1.2.RELEASE:compile [INFO] | +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.11.1:compile [INFO] | | \- org.apache.logging.log4j:log4j-api:jar:2.11.1:compile [INFO] | +- org.apache.logging.log4j:log4j-core:jar:2.11.1:compile [INFO] | +- org.apache.logging.log4j:log4j-jul:jar:2.11.1:compile [INFO] | \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile [INFO] +- com.lmax:disruptor:jar:3.4.2:compile [INFO] \- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.9.8:compile [INFO] \- com.fasterxml.jackson.core:jackson-core:jar:2.9.8:compile
3. log4j2.xml
3.1 Создайте log4j2.xml
в пути к классу проекта/|src/ресурсы/
%d %p %c{1.} [%t] %m%n
3.2 Для log4j2.yml
, нам нужно включить jackson-databind
и jackson-dataformat-yaml
, так как jackson-databind
уже включен в Spring Boot Starter, поэтому нам просто нужно включить jackson-dataformat-yaml
com.fasterxml.jackson.dataformat jackson-dataformat-yaml
Configuration: status: debug appenders: Console: name: LogToConsole PatternLayout: Pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" RollingFile: - name: LogToRollingFile fileName: logs/app.log filePattern: "logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz" PatternLayout: pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" Policies: SizeBasedTriggeringPolicy: size: 10MB DefaultRollOverStrategy: max: 10 Loggers: logger: - name: com.mkyong level: debug additivity: false AppenderRef: - ref: LogToConsole - ref: LogToRollingFile Root: level: error AppenderRef: ref: LogToConsole
4. Привет log4j2 лог4j2
log4j2 4.1 Простое веб-приложение Spring MVC, входящее в систему с помощью log4j2.
package com.mkyong; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import java.util.Arrays; import java.util.List; @Controller public class HelloController { private static final Logger logger = LogManager.getLogger(HelloController.class); private Listnum = Arrays.asList(1, 2, 3, 4, 5); @GetMapping("/") public String main(Model model) { // pre-java 8 if (logger.isDebugEnabled()) { logger.debug("Hello from Log4j 2 - num : {}", num); } // java 8 lambda, no need to check log level logger.debug("Hello from Log4j 2 - num : {}", () -> num); model.addAttribute("tasks", num); return "welcome"; //view } private int getNum() { return 100; } }
log4j2 4.1 Простое веб-приложение Spring MVC, ведение журнала с помощью шаблона log4j2.4.2
Spring Boot + log4j2 example
5. log4j2 4.1 Простое веб-приложение Spring MVC, ведение журнала с демонстрацией шаблона log4j2.4.2
log4j2 4.1 Простое веб-приложение Spring MVC, ведение журнала с помощью log4j2. 4.2 Демонстрационный шаблон 5.1 Запуск загрузки Spring
package com.mkyong; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class StartApplication { public static void main(String[] args) { SpringApplication.run(StartApplication.class, args); } }
log4j2 4.1 Простое веб-приложение Spring MVC, ведение журнала с помощью log4j2. 4.2 Демонстрационный шаблон 5.1 Запуск загрузки Spring http://localhost:8080
Просмотрите ведение журнала:
19:10:08.723 [http-nio-8080-exec-1] DEBUG com.mkyong.HelloController - Hello from Log4j 2 - num : [1, 2, 3, 4, 5] 19:10:08.724 [http-nio-8080-exec-1] DEBUG com.mkyong.HelloController - Hello from Log4j 2 - num : [1, 2, 3, 4, 5]
6. Log4j 2 – Асинхронные регистраторы
6.1 Чтобы включить асинхронное ведение журнала, нам нужно включить разрушитель
com.lmax disruptor 3.4.2
6.2 Установите системное свойство log4j2.contextselector=org.apache.ведение журнала.log4j.core.асинхронный. Асинклоггерконтекстселектор
$ mvn package $ java -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -jar target/logging-log4j2-1.0.jar 019-03-27 19:28:57,185 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@578486a3 2019-03-27 19:28:57,189 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@578486a3,component=AsyncLoggerRingBuffer 2019-03-27 19:28:57,194 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@578486a3,component=StatusLogger 2019-03-27 19:28:57,195 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@578486a3,component=ContextSelector 2019-03-27 19:28:57,195 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@578486a3,component=Loggers,name=org.springframework.boot 2019-03-27 19:28:57,196 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@578486a3,component=Loggers,name= 2019-03-27 19:28:57,196 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@578486a3,component=Loggers,name=com.mkyong 2019-03-27 19:28:57,197 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@578486a3,component=Appenders,name=LogToConsole 2019-03-27 19:28:57,200 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@578486a3,component=Appenders,name=LogToFile
Скачать Исходный Код
пакет $mvn $java.apache.ведение журнала.log4j.core.асинхронный. Асинклоггерконтекстселектор-банка target/logging-log4j2-1.0.jar Доступ локальный хост: 8080
Рекомендации
- Ведение журнала Весенней Загрузки
- Apache Лог4j 2
- Учебные пособия по Apache Log4j 2
- Асинхронные регистраторы для ведения журнала с низкой задержкой
Оригинал: “https://mkyong.com/spring-boot/spring-boot-log4j-2-example/”