1 参考网站
# 开发文档
https://github.com/apache/logging-log4j2
# xml配置文档
https://logging.apache.org/log4j/2.x/manual/appenders.html
2 工程布局
3 log4j2配置
log4j2.xml文件,此文件不需要在application.yml
文件中配置。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="60">
<Properties>
<!-- 设置应用的英文名称 -->
<Property name="App">mylog</Property>
<!-- 设置日志目录 -->
<Property name="logDir">mylog/logs</Property>
<Property name="splitSize">10 MB</Property>
<property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %msg \t %logger{36} %F %M %L %n </property>
</Properties>
<Appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<!-- 记录info和warn级别信息 -->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 输出日志的格式 -->
<PatternLayout pattern="${pattern}"/>
</Console>
<!-- 打印出所有的信息 -->
<RollingFile name="info"
fileName="${logDir}/${App}-info.log"
filePattern="${logDir}/${App}-info-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="${pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${splitSize}"/>
</Policies>
<Filters>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<!-- 存储所有error信息 -->
<RollingFile name="error"
fileName="${logDir}/${App}-error.log"
filePattern="${logDir}/${App}-error-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="${pattern}" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${splitSize}"/>
</Policies>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="console"/>
<AppenderRef ref="info"/>
<AppenderRef ref="error"/>
</Root>
</Loggers>
</Configuration>
4 pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>mylog</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mylog</name>
<description>Mylog project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Init the entity -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<!-- Import the log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- Remove the internal dependency log spring-boot-starter-logging -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.1.RELEASE</version>
</plugin>
</plugins>
</build>
</project>
5 SpringBoot使用Log4j2
5.1 使用LoggerFactory采集日志
TestLogController.java。
package com.example.mylog.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/log")
@ResponseBody
public class TestLogController {
@GetMapping("/test")
public String test(){
Logger logger = LoggerFactory.getLogger(TestLogController.class);
logger.trace("trace level");
logger.debug("debug level");
logger.info("info level");
logger.warn("warn level");
logger.error("error level");
return "1";
}
}
5.2 使用lombok采集日志
TestLogLombokController.java
package com.example.mylog.controller;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/lomlog")
@ResponseBody
@Log4j2
public class TestLogLombokController {
@GetMapping("/test")
public String test(){
log.trace("Lombok trace level");
log.debug("Lombok debug level");
log.info("Lombok info level");
log.warn("Lombok warn level");
log.error("Lombok error level");
return "1";
}
}