• 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

     

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

     

     

     
       
     


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

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

  • 相关阅读:
    Mysql高级——性能分析工具(2)
    Spring Cloud 之 GateWay简介及简单DEMO的搭建
    第二章——操作数据库
    4个杀手级Pycharm高效插件
    git使用,一点点
    GitLab故障排查
    05设计模式-建造型模式-建造者模式
    图片转PDF有哪些软件?这几款软件建议收藏
    UG NX二次开发(C++)-采用std::vector对体对象的质心进行排序
    快手发起“新市井匠人扶持计划” ,支持非遗手艺传承
  • 原文地址:https://blog.csdn.net/gb4215287/article/details/132718715