You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中用Log4J2+Spring Sleuth输出含TraceId、SpanId的JSON日志

实现Spring Sleuth + Log4J2 JSON格式日志(含TraceId/SpanId)

1. 依赖配置(Maven)

先排除Spring Boot默认的Logback依赖,再引入Spring Sleuth和Log4J2相关依赖:

<dependencies>
    <!-- Web Starter,排除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>

    <!-- Spring Sleuth -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>

    <!-- Log4J2 Starter + JSON布局依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-layout-template-json</artifactId>
    </dependency>
</dependencies>

<!-- Spring Cloud版本管理,适配Spring Boot 2.7.x -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2021.0.5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2. Log4J2配置文件(log4j2.xml)

在src/main/resources下创建配置文件,配置JSON布局并注入TraceId/SpanId:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <!-- 自定义JSON字段布局 -->
            <JsonLayout compact="true" eventEol="true">
                <KeyValuePair key="traceId" value="%X{traceId}"/>
                <KeyValuePair key="spanId" value="%X{spanId}"/>
                <KeyValuePair key="level" value="%level"/>
                <KeyValuePair key="message" value="%message"/>
                <KeyValuePair key="logger" value="%logger"/>
                <KeyValuePair key="timestamp" value="%d{ISO8601}"/>
            </JsonLayout>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

3. 验证测试

编写简单Controller打印日志:

@RestController
public class TestController {
    private static final Logger logger = LogManager.getLogger(TestController.class);

    @GetMapping("/test")
    public String test() {
        logger.info("Received test request");
        return "OK";
    }
}

启动项目后访问/test,控制台会输出类似如下的JSON日志:

{"traceId":"a1b2c3d4","spanId":"e5f6g7h8","level":"INFO","message":"Received test request","logger":"com.example.TestController","timestamp":"2024-05-20T14:30:00.456Z"}

注意事项

  • 若使用Spring Boot 3.x,Spring Sleuth已被Micrometer Tracing替代,依赖换成micrometer-tracing-bridge-brave,MDC中的traceId和spanId键名保持不变,配置逻辑一致。
  • 避免同时引入Logback和Log4J2依赖,防止冲突。
  • 如需输出日志到文件,在Appenders中添加File节点并复用上述JSON布局即可。

内容的提问来源于stack exchange,提问作者Murali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:52:58