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
相关产品推荐
相关产品推荐

