spring-cloud-starter-sleuth 使用brave 的 Tracing 來實現日誌trace輸出
javascript
maven:java
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-instrumentation-dubbo-rpc</artifactId> <version>5.6.0</version> </dependency>
dubbo配置spring
dubbo.provider.filter: tracing dubbo.consumer.filter: tracing
此處的tracing 對應的是 brave-instrumentation-dubbo-rpc 包內的 文件 com.alibaba.dubbo.rpc.Filter 配置的 brave.dubbo.rpc.TracingFilter 處理類。async
SleuthInterceptor.invoke ->NonReactorSleuthMethodInvocationProcessor.proceedUnderSynchronousSpan -> Trace.withSpanInScopemaven
在invoke時,經過com.alibaba.dubbo.rpc.RpcContext斷定當前服務的角色:
consumer 從當前的Tracer中生成nextSpan,將span.context()扔入中com.alibaba.dubbo.rpc.RpcInvocation的attachments中,傳遞到provider去。
provider 從RpcInvocation中的Attachments獲取傳入的TraceContext,並joinSpan到當前trace。
(固然,若是爲空,會生成新的TraceContext)
ide
在真正的Invoker.invoke前
brave.Tracer.withSpanInScope -> brave.propagation.ThreadLocalCurrentTraceContext.newScope -> brave.propagation.CurrentTraceContext.decorateScope
-> org.springframework.cloud.sleuth.log.Slf4jScopeDecorator.decorateScope 設置MDC值
post