r要将Spring Boot 3项目中的日志框架从Logback切换到Log4j2,并配置按日期滚动文件和控制台输出,请按照以下步骤操作:
步骤 1:排除Logback并添加Log4j2依赖
在pom.xml
中修改依赖:
<dependencies>
<!-- 排除默认的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>
<!-- 添加Log4j2依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 其他依赖... -->
</dependencies>
<!-- 可选:添加异步日志支持(如需要高性能) -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.4</version>
</dependency>
步骤 2:创建Log4j2配置文件
在src/main/resources
目录下创建log4j2-spring.xml
,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<!-- Powered by Moshow@zhengkai.blog.csdn.net -->
<Properties>
<Property name="LOG_PATTERN_FILE">
%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT+0} [%t] %-5level %logger{36} - %msg%n
</Property>
<Property name="LOG_PATTERN_CONSOLE">
%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level} [%t] %highlight{%c{1.}.%M(%L)}: %msg%n%throwable
</Property>
<Property name="LOG_DIR" value="logs"/>
<Property name="LOG_FILE_NAME" value="sre_audit_log_dev"/>
</Properties>
<Appenders>
<!-- 控制台输出 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN_CONSOLE}" disableAnsi="false" noConsoleNoAnsi="false"/>
</Console>
<!-- 按日期滚动的文件输出 -->
<RollingFile name="RollingFile"
fileName="${LOG_DIR}/${LOG_FILE_NAME}.log"
filePattern="${LOG_DIR}/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${LOG_PATTERN_FILE}"/>
<Policies>
<!-- 每天滚动一次 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="50 MB" />
</Policies>
<!-- 保留最近7天的日志 -->
<DefaultRolloverStrategy max="90"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
步骤 3:验证配置
-
启动应用:检查控制台是否有日志输出。
-
检查文件:查看
logs/app.log
是否生成,且每天会自动滚动生成新文件(如app-2023-10-01.log
)。 -
验证Lombok:确保
@Slf4j
注解生成的日志能正常工作。
高级配置(可选)
-
异步日志:在配置文件中使用
<AsyncLogger>
或<AsyncRoot>
提升性能。 -
按大小滚动:在
RollingFile
中添加<SizeBasedTriggeringPolicy size="100 MB"/>
,实现按大小滚动。 -
多环境配置:使用Spring Profile,创建
log4j2-spring-dev.xml
和log4j2-spring-prod.xml
。
常见问题
-
依赖冲突:若启动时报SLF4J绑定冲突,检查是否遗漏排除
spring-boot-starter-logging
。 -
配置路径:确保配置文件命名为
log4j2-spring.xml
并放在src/main/resources
下。 -
时区问题:滚动时间基于服务器时区,可用
<TimeBasedTriggeringPolicy timeZone="UTC"/>
指定时区。
多环境配置
application.yaml中指定active的内容(本地模式),服务器则通过命令注入
java -jar your-app.jar --spring.profiles.active=dev
spring:
profiles:
active: dev
logging:
config: classpath:log4j2-spring-dev.xml
然后application-dev.yaml中指定对应的文件为log4j2-spring-dev.yaml,从而形成闭环