微服务日志未包含Trace ID:基于Micrometer Tracing的解决求助
解决微服务日志Trace ID不显示问题
1. 补充缺失的日志依赖
你使用Log4j2作为日志框架,但缺少Brave对Log4j2的埋点依赖,导致Trace ID无法注入到MDC(映射诊断上下文)中。在pom.xml中添加以下依赖:
<dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-instrumentation-log4j2</artifactId> </dependency>
同时明确指定兼容版本(与Spring Cloud 2022.0.0匹配),在properties节点补充:
<properties> <!-- 原有属性保留 --> <micrometer-tracing.version>1.0.1</micrometer-tracing.version> <brave.version>5.14.1</brave.version> </properties>
2. 修正日志格式配置
当前logging.pattern.level配置适配Logback,针对Log4j2需调整为控制台日志格式:
logging: pattern: console: "%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}] %c{1}:%L - %m%n"
如果使用自定义log4j2.xml文件,确保PatternLayout包含Trace ID和Span ID:
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [${spring:spring.application.name},%X{traceId:-},%X{spanId:-}] %c{1}:%L - %m%n"/>
3. 修复Eureka配置缩进错误
application.yml中Eureka实例配置存在缩进问题,修正后:
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka instance: preferIpAddress: true
4. 验证Trace ID输出
在控制器中添加测试日志,确认请求触发Trace ID生成:
import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Slf4j public class TestController { @GetMapping("/test") public String test() { log.info("处理测试请求"); return "OK"; } }
启动服务后访问http://localhost:8082/test,查看控制台日志,即可看到包含Trace ID和Span ID的输出内容。
内容的提问来源于stack exchange,提问作者Summy Saurav
相关产品推荐
相关产品推荐

