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,從而形成閉環?