1、spring boot2.x需要先排除本身自带的logback
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
2、引入MAVEN依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
3、在spring boot 项目的resources文件下创建log4j2.xml,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<!-- 定义日志的输出方式和格式 -->
<Appenders>
<!-- RollingFile Appender,用于将日志输出到文件中,第一次生成error.log,之后每次翻滚会把erroe.log重命名为当天时间,例如2023-09-20.log,然后在生成一个新的error.log,依次类推 -->
<RollingFile name="ErrorFile" fileName="./logs/error.log" filePattern="./logs/%d{yyyy-MM-dd}.log">
<!-- 定义日志的输出方式和格式 -->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 日志消息的格式化方式 -->
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern>
</PatternLayout>
<Policies>
<!-- 滚动策略,每天0点创建新的日志文件,不管是否有日志生成 -->
<CronTriggeringPolicy schedule="0 0 0 * * ?" />
<!-- 时间触发策略,每隔1分钟检查是否需要滚动 -->
<TimeBasedTriggeringPolicy interval="1" />
</Policies>
<!--这里配置了滚动策略,max 属性设置为 "30",表示最多保留30个滚动文件。当日志文件数量达到30个时,旧文件会被删除-->
<DefaultRolloverStrategy max="30">
<!--maxDepth属性设置为 "0",则删除操作将仅删除 basePath 目录下的文件,不会删除任何子目录、 设置为"1"则删除路径下1级子目录的文件,依次类推-->
<!--basePath 属性指定了删除操作的基本路径-->
<Delete basePath="./logs/" maxDepth="0">
<!--只有文件名匹配 *.log 且最后修改时间在7天之前的日志文件会被删除-->
<IfFileName glob="*.log" />
<IfLastModified age="7d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<!-- Console Appender,用于将日志输出到控制台 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 过滤器,只接受 INFO 级别及以上的日志消息 -->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 日志消息的格式化方式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<!-- 配置日志的根Logger -->
<Loggers>
<Root level="INFO">
<!-- 关联日志输出目标,这里关联了 "ErrorFile" 和 "Console" 两个输出源 -->
<AppenderRef ref="ErrorFile"/>
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
4、以下是一个示例目录结构,其中 <Delete>
元素的 maxDepth
设置为 "2",以便删除 basePath
目录下的文件、一级子目录中的文件,以及二级子目录中的文件:
目录结构解释:
./logs/
├── log1.log
├── log2.log
├── subdirectory1/
│ ├── log3.log
│ └── subsubdirectory1/
│ └── log5.log
└── subdirectory2/
├── log4.log
└── subsubdirectory2/
└── log6.log
如果你的删除配置中 maxDepth
设置为 "2",删除操作将删除以下文件:
./logs/log1.log
./logs/log2.log
./logs/subdirectory1/log3.log
./logs/subdirectory2/log4.log
但不会删除以下文件:
./logs/subdirectory1/subsubdirectory1/log5.log
./logs/subdirectory2/subsubdirectory2/log6.log
这就是 maxDepth
设置为 "2" 时的行为,它递归删除指定深度以下的文件,但不会删除更深层次的子目录中的文件。