首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不显示SpringBoot (日志相关)- Traceid & SpanId的春季侦查

不显示SpringBoot (日志相关)- Traceid & SpanId的春季侦查
EN

Stack Overflow用户
提问于 2020-04-24 14:46:54
回答 2查看 10.2K关注 0票数 8

我有一个现有的Spring (2.2.0)应用程序,并试图集成Spring,以获得自动跟踪和span。logback文件如下-

代码语言:javascript
复制
<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的更新之外,不需要其他任何东西-

代码语言:javascript
复制
<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>

代码语言:javascript
复制
<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>

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

代码语言:javascript
复制
<include resource="org/springframework/boot/logging/logback/base.xml"/>

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

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

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-25 09:36:39

traceId和spanId通过覆盖/扩展日志模式的日志级别“字段”(在org.springframework.cloud.sleuth.autoconfig.TraceEnvironmentPostProcessor中)而进入日志。

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

代码语言:javascript
复制
    <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-features-custom-log-configuration列出了应用程序.(属性为yml)字段,以从属性调整春启动日志记录。

例如,我有用于向下游传播的自定义BaggageFields,以及在日志文件中看到它们的application.properties,我将应用程序属性定义如下:(I 不要定义自定义logback.xml!)

对于侦探2.0+

代码语言:javascript
复制
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+

代码语言:javascript
复制
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:-}]"
票数 12
EN

Stack Overflow用户

发布于 2020-05-06 15:38:44

如果有人正在寻找卷积,我可以使用以下更改获得它--向您添加以下内容: logback-spring.xml

代码语言:javascript
复制
 <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" />

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

代码语言:javascript
复制
%clr(${LOG_LEVEL_PATTERN:-%5p})

例如:-

代码语言:javascript
复制
<Pattern>%d %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(%-40.40logger{39}) %clr([%20.20t]) %clr(:) %m%n</Pattern>

希望这能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61411091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档