java的springboot框架中使用logback日志框架使用RabbitHandler注解为什么获取不到消费的traceId信息?

当使用 Logback 日志框架和 RabbitMQ 的 @RabbitHandler 注解时,如果无法获取消费的 traceId 信息,可能是因为在处理 RabbitMQ 消息时,没有正确地将 traceId 传递到日志中。

为了将 traceId 传递到日志中,你可以利用 MDC(Mapped Diagnostic Context)机制。MDC 是一个线程绑定的上下文容器,允许你在整个线程处理过程中存储和访问自定义的上下文信息。

以下是一个示例,展示如何在 Spring Boot 应用程序中使用 Logback、RabbitMQ 和 MDC 来记录消费的 traceId 信息:

首先,在消息处理方法中,手动将 traceId 设置到 MDC 中。

import org.slf4j.MDC;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;

import org.springframework.amqp.rabbit.annotation.RabbitListener;

import org.springframework.stereotype.Component;

@Component

@RabbitListener(queues = "your_queue_name")

public class RabbitMQConsumer {

@RabbitHandler

public void handleMessage(Message message) {

// 从消息中获取 traceId

String traceId = message.getTraceId();

// 将 traceId 设置到 MDC 中

MDC.put("traceId", traceId);

// 处理消息的逻辑...

// 完成后清除 MDC 中的 traceId

MDC.remove("traceId");

}

}

在上述示例中,我们使用 MDC.put("traceId", traceId) 将 traceId 设置到 MDC 中,并在消息处理完成后使用 MDC.remove("traceId") 清除。

接下来,在 Logback 配置文件中的日志输出模式中,添加 %X{traceId} 占位符来输出 traceId 信息。

xml

Copy code

<configuration>

<!-- 其他配置项... -->

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

<encoder>

<pattern>%date [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n</pattern>

</encoder>

</appender>

<!-- 其他 appender 配置... -->

<root level="INFO">

<appender-ref ref="CONSOLE" />

</root>

</configuration>

在上述示例中,我们将 %X{traceId} 添加到输出模式的 %date、%thread 和 %level 之间,以获取 traceId 信息。

通过上述配置,你应该能够在日志中看到消费的 traceId 信息了。确保在消息处理方法中正确设置和清除 MDC,并在日志输出模式中正确使用 %X{traceId} 占位符。

相关推荐
寻星探路11 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧13 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法14 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty72514 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎14 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄14 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
忆~遂愿14 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds14 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化
仟濹15 小时前
【Java基础】多态 | 打卡day2
java·开发语言
Re.不晚15 小时前
JAVA进阶之路——无奖问答挑战2
java·开发语言