log4j2
一.maven引入log4j2
注意 要先去掉spring boot默认日志框架.在pom文件中去除.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 去掉SpingBoot默认的日志系统:LogBack,集成在spring-boot-starter-logging -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
然后引入 log4j2
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
二.通过xml文件,配置log4j2日志
spring boot 默认加载classpath 下名称为log4j2.xml的log4j2配置文件.即resources目录下
也可以通过 application.yml配置文件指定

在类中使用:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.*;
/**
* @author shf
* @date 2021/10/13
*/
@RestController
@RequestMapping("test")
public class TestController {
private static final Logger logger= LogManager.getLogger(TestController.class);
@PostMapping("/send2")
public void sendJSON(@RequestBody String input) {
logger.trace("trace test:{}",input);
logger.info("info test:{}",input);
logger.debug("debug test:{}",input);
logger.warn("warn test:{}",input);
}
}
三.log4j2.xml配置
<Properties> 标签下 定义一些局部变量 <Appenders>标签下 配置日志相关信息包括控制台信息,备份日志信息 <RollingFile>标签配置输出日志相关内容 <Console>标签中的 如果遇到控制字体样式问题,可以通过 设置disableAnsi="false" 解决
log4j2.xml示例:
info error warn日志每天根据时间和日志文件大小单独备份存储,并且设置定期自动删除.
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<Properties>
<Property name="logFilePath">log</Property>
<Property name="logFileName">project-log4j2</Property>
<Property name="backupPath">${logFilePath}/%d{yyyy-MM-dd}</Property>
<!--当前精确的分钟,可根据情况自行配置-->
<Property name="backupHZ">%d{yyyy-MM-dd-HH-mm}</Property>
<!--日志文件中的日志打印格式-->
<Property name="logFormat">[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t %c[%L] - %m %n</Property>
</Properties>
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<!--disableAnsi="false" 如果不设置为false,在windows系统下,console日志颜色的配置不会生效-->
<PatternLayout disableAnsi="false">
<!--%style{%d}{Underline,black},设置时间格式,及颜色样式-->
<!--%style{[%t]}{Underline,FG_White},设置线程,及颜色样式-->
<!--%highlight{%-5level:}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=Bright Cyan, TRACE=Bright Blue},设置日志LEVEL,及颜色样式-->
<!--%style{%msg(%L)}{Default},设置方法名,及颜色样式-->
<!--%throwable,异常 相关-->
<pattern>%style{%d}{Underline,black} %style{[%t]}{Underline,FG_White} | %style{%c{1.}}{Underline,FG_Cyan} | %style{%M}{Underline,Black} | %highlight{%-5level:}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=Bright Cyan, TRACE=Bright Blue} %style{%msg(%L)}{Default} %throwable %n</pattern>
</PatternLayout>
</Console>
<!--INFO日志收集-->
<RollingFile name="infoLog" fileName="${logFilePath}/${logFileName}-infoLog.log"
filePattern="${backupPath}/info/${logFileName}-infoLog-${backupHZ}-%i.log">
<!--日志文件中的日志格式-->
<PatternLayout pattern="${logFormat}"/>
<Policies>
<!--根据时间备份,interval表示间隔时间, 需结合${backupPath}中的时间,当前精确到分钟,所以就是按1分钟间隔. 可单独使用-->
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<!--根据日志文件大小配置,size为当前日志文件大小.可单独使用-->
<SizeBasedTriggeringPolicy size="2MB"/>
</Policies>
<!-- <DefaultRolloverStrategy max="15">-->
<!--设置日志定时删除-->
<DefaultRolloverStrategy>
<!--扫描的日志文件路径,maxDepth为文件层级-->
<Delete basePath="${logFilePath}/" maxDepth="3">
<!--默认规则,只能删除文件,不能删除文件夹,如果需要删除文件夹需 添加ScriptCondition节点,再添加Script子节点,这样删除什么完全由脚本决定 . 可参考官网 http://logging.apache.org/log4j/2.x/manual/appenders.html#ScriptCondition-->
<IfFileName glob="*/info/${logFileName}-infoLog-*.log"/>
<!--日志保存期限 age的单位:D、H、M、S,分别表示天、小时、分钟、秒-->
<IfLastModified age="2D" />
</Delete>
</DefaultRolloverStrategy>
<!--过滤器 只打印INFO日志-->
<Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMisMatch="NEUTRAL"/>
<ThresholdFilter Level="INFO" onMatch="ACCEPT" onMisMatch="DENY"/>
</Filters>
</RollingFile>
<!--WARN日志收集-->
<RollingFile name="warnLog" fileName="${logFilePath}/${logFileName}-warnLog.log"
filePattern="${backupPath}/warn/${logFileName}-warnLog-${backupHZ}-%i.log">
<PatternLayout pattern="${logFormat}"/>
<Policies>
<!-- <TimeBasedTriggeringPolicy modulate="true" interval="1"/>-->
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<!-- <DefaultRolloverStrategy max="15">-->
<DefaultRolloverStrategy>
<!-- <Delete basePath="${backupPath}/warn/" maxDepth="1">-->
<Delete basePath="${logFilePath}/" maxDepth="3">
<!-- <IfFileName glob="${logFilePath}-info*.log.gz"/>-->
<IfFileName glob="*/warn/${logFileName}-warnLog-*.log"/>
<!-- <IfLastModified age="60m" />-->
<IfLastModified age="3D" />
</Delete>
</DefaultRolloverStrategy>
<!--过滤器 只打印WARN日志-->
<!-- <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>-->
<Filters>
<ThresholdFilter level="ERROR" onMatch="DENY" onMisMatch="NEUTRAL"/>
<ThresholdFilter Level="WARN" onMatch="ACCEPT" onMisMatch="DENY"/>
</Filters>
</RollingFile>
<!--ERROR 日志收集-->
<RollingFile name="errorLog" fileName="${logFilePath}/${logFileName}-errorLog.log"
filePattern="${backupPath}/error/${logFileName}-errorLog-${backupHZ}-%i.log">
<PatternLayout pattern="${logFormat}"/>
<Policies>
<!-- <TimeBasedTriggeringPolicy modulate="true" interval="1"/>-->
<SizeBasedTriggeringPolicy size="2MB"/>
</Policies>
<DefaultRolloverStrategy>
<!-- <Delete basePath="${backupPath}/error/" maxDepth="1">-->
<Delete basePath="${logFilePath}/" maxDepth="3">
<!-- <IfFileName glob="${logFilePath}-info*.log.gz"/>-->
<IfFileName glob="*/error/${logFileName}-errorLog-*.log"/>
<!-- <IfLastModified age="60m" />-->
<IfLastModified age="3D" />
</Delete>
</DefaultRolloverStrategy>
<!--过滤器 只打印WARN日志-->
<ThresholdFilter Level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
</RollingFile>
</Appenders>
<Loggers>
<root level="info">
<AppenderRef ref="CONSOLE"/>
<AppenderRef ref="infoLog"/>
<AppenderRef ref="warnLog"/>
<AppenderRef ref="errorLog"/>
<!-- <AppenderRef ref="RollingTimeFile"/>-->
</root>
</Loggers>
</configuration>

本文介绍了如何在Spring Boot项目中集成Log4j2,首先需要在pom.xml中移除默认日志框架并引入Log4j2依赖。接着通过XML配置文件设置日志,Spring Boot会默认加载classpath下的log4j2.xml。内容包括日志级别如info、error、warn的记录,并配置了日志按日期和大小进行备份及自动删除的策略。
1451

被折叠的 条评论
为什么被折叠?



