利用MDC + dubbo filter记录dubbo日志

MDC

MDC Mapped Diagnostic Contexts 是一个诊断的工具类。支持logback log4j,提供的方法很简单,get put remove clear,这些方法针是针对线程的上下文的操作,其实MDC的实现也比较简单,核心是对ThreadLocal的一个子类InheritableThreadLocal的操作,这样保证了该类的子类共享该类的上下文

dubbo filter

dubbo filter 可以为dubbo服务传递上下文,这样结合MDC就可以用来分析dubbo服务上下文之间的调用,特别在并发量大的时候能够很清晰的grep出来同一个请求的上下文,让定位问题更简单

例子

logback.xml



    
        
            %d{HH:mm:ss.SSS} [%thread][%X{trace_id}] %-5level %logger{36} - %msg%n
        
    
    
        
    

注意%X{trace_id}记录了trace_id的变量值

关于logback其他参数

%msg就是单纯的日志内容

%n 换行

%-5level 左对齐 最短长度5 日志等级

打印日志也是对性能有一定的影响的,打印的内容需要注意下

dubbo filter

public class TraceFilter implements Filter {
    @Override
    public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {
        // trace_id 可以从请求参数中获取
        MDC.put("trace_id", UUID.randomUUID().toString());
        return invoker.invoke(invocation);
    }
}

在请求开始时记录下来 trace_id,也可以在请求头中加入trace相关信息,这样在分布式系统中就可以将日志信息串联起来

利用MDC + dubbo filter记录dubbo日志

你可能感兴趣的:(利用MDC + dubbo filter记录dubbo日志)