Log4j 2.x 在Springboot应用中如何配置
Log4j 2.x 在Springboot应用中如何配置
摘要:通过本章节的学习掌握Log4j 2.x 在Springboot中配置方法
引入log4j2的依赖包 pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
resources/log4j2.xml 的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
<Appenders>
<!--添加一个控制台追加器-->
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout>
<pattern>[%-5p] %d %c - %m%n</pattern>
</PatternLayout>
</Console>
<!--添加一个文件追加器-->
<RollingFile name="infoFile" fileName="logs/info.log" filePattern="logs/info.%d{yyyy-MM-dd}-%i.log" ignoreExceptions="false">
<LevelRangeFilter minLevel="INFO" maxLevel="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="1KB" />
</Policies>
<DefaultRolloverStrategy max="2" />
</RollingFile>
<RollingFile name="errorFile" fileName="logs/error.log" filePattern="logs/error.%d{yyyy-MM-dd}-%i.log" ignoreExceptions="false">
<LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="1KB" />
</Policies>
<DefaultRolloverStrategy max="2" />
</RollingFile>
</Appenders>
<Loggers>
<!--根记录,调试模式,线上模式更改为INFO-->
<Root level="ERROR">
<AppenderRef ref="Console" />
<AppenderRef ref="errorFile" />
<AppenderRef ref="infoFile" />
</Root>
<Logger name="org.sea" level="INFO" />
<Logger name="org.springframework" level="INFO" />
<Logger name="zaxxer.hikari" level="INFO" />
<Logger name="org.thymeleaf" level="INFO" />
<Logger name="com.ibatis" level="INFO"/>
<Logger name="java.sql" level="INFO" />
</Loggers>
</Configuration>
以上配置使用了RollingFile追加器,可以定义多个多个追加器,每个追加器定义不同的级别,在生产环境,我们希望能够按日志级别归类打印文件,同时指定文件的过期策略,防止磁盘被打满,RollingFile追加器能满足我们的需求,根据log4j2的架构,我们知道追加器内部可以添加过滤器、布局。LevelRangeFilter 过滤器能为指定打印日志级别。
<LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
提示:指定打印的日志级别为ERROR级别,匹配打印,不匹配拒绝打印
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern>
</PatternLayout>
提示:指定日志输出格式 ,日志输出格式可以根据需要自定义,自定义需要结合MDC使用
<Policies>
<SizeBasedTriggeringPolicy size="1KB" />
</Policies>
<DefaultRolloverStrategy max="2" />
提示:追加器的策略,表示文件大小为1KB ,文件个数最大为2个,size和max都达到最大值的时候会自动刷新已经生成的日志,按照时间顺序自动刷新过期日志数据。
resources/application.yml配置
logging:
config: classpath:log4j2.xml
java代码使用
package org.sea.spring.cloud.nacos.job;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.sea.spring.cloud.nacos.feign.EchoFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class EchoFeignJob {
Logger logger = LogManager.getLogger(this.getClass());
@Autowired
EchoFeignClient echoFeignClient;
@Scheduled(fixedRate = 1000)
public void test() {
String result =echoFeignClient.echo("zhangshan0001");
logger.info("result:{}",result);
logger.error("result is error");
}
}
更多的log4j2的配置详情,请参阅 https://howtodoinjava.com/log4j2/