Spring sleuth with SpringBoot (log correlation) - Traceid 和 SpanId 未显示



我有一个现有的Spring启动(2.2.0(应用程序,正在尝试集成Spring云侦探以获得自动跟踪和span id。logback文件如下-

<configuration>
<property name="LOGS" value="./logs" />
<appender name="Console"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
</Pattern>
</layout>
</appender>
<appender name="RollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS}/spring-boot-logger.log</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily and when the file reaches 100 MegaBytes -->
<fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- LOG everything at specified level level -->
<root level="info">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</root>

此logback配置未按预期记录/显示traceId
据我所知,除了更新pom.xml之外,不需要其他任何东西,如下所示-

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth</artifactId>
<version>2.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

令人惊讶的是,如果我在logback配置-中包含以下内容

<include resource="org/springframework/boot/logging/logback/base.xml"/>

traceid、spanid和应用程序名称显示在控制台上。可能来自base.xml配置。

知道我的logback文件或任何其他配置可能出了什么问题吗?配置中缺少什么吗?

感谢您的帮助。

Well sleuth通过覆盖/扩展日志模式(org.springframework.cloud.sleuth.autoconfig.TraceEnvironmentPostProcessor内部(的日志级别"字段"将traceId和spanId获取到日志中

因此在defaults.xml(在base.xml中导入(中,spring将pattern定义为:

<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

正如您所看到的,如果定义了变量LOG_LEVEL_PATTERN,它就是一个(然后在TraceEnvironmentPostProcessor中被覆盖/扩展,如果没有,它默认为默认级别模式%5p

因此,如果您不包含base.xml,sleuth将无法将日志级别模式"调整"为LOG_LEVEL_PATTERN,那么该模式中就不存在。

如文件所述(https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-logging(您总是应该在您的自定义logback.xml中包含base.xml,您就可以了。

不推荐:
试着将日志级别模式定义为${LOG_LEVEL_PATTERN:-%5p},而不仅仅是%5p%-5level(但如果你问我,包括base.xml的解决方案是正确的解决方案。

还有:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-功能自定义日志配置列表应用程序。(properties|yml(字段,以便从属性中调整春季启动日志记录。

例如,我有用于向下游传播的自定义BaggageFields和在日志文件中查看它们的application.properties。我定义应用程序属性如下:(我定义自定义logback.xml!(

适用于侦探2.0+

logging:
pattern:
level: "%5p [${spring.zipkin.service.name:${spring.application.name:-}},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}] [%X{ddd:-},%X{bp:-},%X{bpids:-}] [%X{op:-},%X{chunk:-},%X{i:-}]"

适用于侦探3.0+

logging:
pattern:
level: "%5p [${spring.zipkin.service.name:${spring.application.name:}},%X{traceId:-},%X{spanId:-}] [%X{ddd:-},%X{bp:-},%X{bpids:-}] [%X{op:-},%X{chunk:-},%X{i:-}]"

如果有人在寻找解决方案,我可以通过以下更改获得它-将以下内容添加到您的logback-spring.xml 中

<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

然后在日志模式中使用以下变量-

%clr(${LOG_LEVEL_PATTERN:-%5p})

例如:-

<Pattern>%d %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(%-40.40logger{39}) %clr([%20.20t]) %clr(:) %m%n</Pattern>

希望这能帮助到别人。

最新更新