dubbo Trace 日志追踪

本文介绍了一种在Dubbo框架中实现请求跟踪的方法,通过TraceIDFilter过滤器,为每个RPC调用生成并传递唯一的traceId,以便于在分布式系统中进行请求链路追踪。该实现使用了阿里巴巴的Dubbo框架,以及SLF4J和Logback进行日志记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.*;
import com.bwton.ttsp.pay.common.util.TraceIDUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;

/**
 * TokenInvokerFilter
 *
 * @author william.liangf
 */
@Slf4j
@Activate(group = {Constants.CONSUMER, Constants.PROVIDER})
public class TraceIDFilter implements Filter {
    private static final String TRACE_ID = "traceId";

    public static Gson getGson() {
        return new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
    }

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation)
            throws RpcException {
//        if (invocation.getAttachment(TRACE_ID) != null) {
//            TraceIDUtils.setTraceId(invocation.getAttachment(TRACE_ID));
//            String mdcData = invocation.getAttachment(TRACE_ID);
//            MDC.put(TRACE_ID, mdcData);
//        } else if (TraceIDUtils.getTraceId() != null) {
//            invocation.getAttachments().put(TRACE_ID, TraceIDUtils.getTraceId());
//        }
        if (invocation.getAttachment(TRACE_ID) != null) {
            MDC.put(TRACE_ID, invocation.getAttachment(TRACE_ID));
        } else{
            String trace = (int)(Math.random()*9000+1000)+"";
            invocation.getAttachments().put(TRACE_ID, trace);
            MDC.put(TRACE_ID, trace);
        }

        return invoker.invoke(invocation);
    }
}

 

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread][%X{traceId}] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

traceIdFilter=com.bwton.ttsp.pay.common.filter.TraceIDFilter

转载于:https://my.oschina.net/dyyweb/blog/2979259

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值