百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文
Spring Boot 整合 Log4j2 指南_spring boot slf4j logback

Spring Boot 整合 Log4j2 指南_spring boot slf4j logback

  • 网站名称:Spring Boot 整合 Log4j2 指南_spring boot slf4j logback
  • 网站分类:技术文章
  • 收录时间:2025-09-23 16:58
  • 网站地址:

进入网站

“Spring Boot 整合 Log4j2 指南_spring boot slf4j logback” 网站介绍

Spring Boot 整合 Log4j2 指南

Spring Boot 默认使用 Logback 作为日志框架,但在高并发、异步日志、灵活配置等场景下,Log4j2 具有更高的性能和更丰富的特性。下面介绍如何在 Spring Boot 项目中切换并集成 Log4j2。


1. 排除默认的 Logback 并添加 Log4j2 依赖

在 pom.xml 中排除默认的
spring-boot-starter-logging,并引入 Log4j2:

<dependencies>
    <!-- 排除 Spring Boot 默认的 logging (Logback) -->
    <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>
    
    <!-- 添加 Log4j2 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
</dependencies>

2. 创建 Log4j2 配置文件

在 src/main/resources 下创建 log4j2.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <Property name="LOG_PATTERN">
            %d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] %-40.40c{1.} : %m%n%ex
        </Property>
        <Property name="LOG_PATH">logs</Property>
        <Property name="LOG_FILE_NAME">app</Property>
    </Properties>

    <Appenders>
        <!-- 控制台输出 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>

        <!-- 滚动文件输出 -->
        <RollingFile name="File" fileName="${LOG_PATH}/${LOG_FILE_NAME}.log"
                     filePattern="${LOG_PATH}/${LOG_FILE_NAME}-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!-- 项目包日志 -->
        <Logger name="com.yourpackage" level="debug" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Logger>

        <!-- 框架日志 -->
        <Logger name="org.springframework" level="info"/>
        <Logger name="org.hibernate" level="warn"/>

        <!-- Root 日志 -->
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>

3. 使用日志记录

在 Java 类中使用 Log4j2 记录日志:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {
    private static final Logger logger = LogManager.getLogger(MyController.class);
    
    @GetMapping("/test")
    public String test() {
        logger.trace("This is a TRACE message");
        logger.debug("This is a DEBUG message");
        logger.info("This is an INFO message");
        logger.warn("This is a WARN message");
        logger.error("This is an ERROR message");
        
        return "Check the logs!";
    }
}

4. 高级配置选项

4.1 按环境使用不同配置

在 application.properties 或 application.yml 中指定不同环境的配置文件:

logging.config=classpath:log4j2-dev.xml

4.2 异步日志提升性能

添加依赖:

<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.4.4</version>
</dependency>

修改配置为异步日志:

<AsyncLogger name="com.yourpackage" level="debug" additivity="false">
    <AppenderRef ref="Console"/>
    <AppenderRef ref="File"/>
</AsyncLogger>

4.3 YAML 或 JSON 配置

除了 XML,还可以用 log4j2.yaml:

Configuration:
  status: warn
  monitorInterval: 30
  
  Appenders:
    Console:
      name: Console
      target: SYSTEM_OUT
      PatternLayout:
        pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] %-40.40c{1.} : %m%n%ex"
  
  Loggers:
    Root:
      level: info
      AppenderRef:
        - ref: Console

5. 常见问题排查

  1. 日志冲突:确认已排除 spring-boot-starter-logging
  2. 配置不生效:检查 log4j2.xml 是否放在 resources 根目录
  3. 日志级别无效:检查是否存在多个配置文件

通过以上步骤,你就能在 Spring Boot 中无缝切换到 Log4j2,并灵活地定制日志输出,提升系统的性能和可维护性。