我们知道,在spring cloud 中集成 sleuth , 就是服务链路追踪,
主要是通过appName,spanId,traceId来进行追踪,
在没有引入logback等时,在控制台,是可以看到sleuth 默认会打印:
注意[appname,traceId,spanId,exportable]
来自MDC 的条目:
spanId
:发生的特定操作的ID。appname
:记录跨度的应用程序的名称。traceId
:包含跨度的延迟图的ID。exportable
:是否应将日志导出到Zipkin。您何时希望跨度不可导出?当您要将某些操作包装在Span中并将其仅写入日志时。
但是在引入logback后,
logback-spring.xml 配置文件,如何配置:
<appender name = "consoleLog" class = "ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> %d ---[ provider ]--- [${applicationName},%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}] [%thread] %-5level %logger{50} --- %msg%n </pattern> </layout> </appender>
这里可以读取到:TraceId,SpanId,是否导出到Zipkin
但是打印当前应用名称。
那我们的解决方案就是从application.xml 配置文件中取读取。
但这里又存在一个问题,就是logback-spring.xml一般会在application.yml之前进行加载,所以我们直接用${applicationName}无法读取到。这时我们需要引入springProperty,提前声明好要用的name,就可以取到了。