Spring Sleuth с SpringBoot (логарифмическая корреляция) - Traceid & SpanId Не отображается - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть приложение Spring boot (2.2.0), и я пытаюсь интегрировать Spring Cloud Sleuth, чтобы получить автоматизированный c идентификатор трассировки и диапазона. Файл 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 и имя приложения отображаются на консоли. Возможно из базы. xml config.

Есть идеи, что может быть не так с моим файлом logback или любым другим конфигом? Чего-то не хватает в конфиге?

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

В случае, если кто-то там искал решение, я смог получить его, используя следующие изменения - добавьте следующее к вам 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>

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 25 апреля 2020

Ну что же, сыщик получает traceId и spanId в журналы, перезаписывая / расширяя «поле» уровня журнала шаблона журнала (внутри org.springframework.cloud.sleuth.autoconfig.TraceEnvironmentPostProcessor)

, поэтому в defaults.xml (импортируется в base.xml) пружина определяет 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

, поэтому, если вы включите , а не включите базу. xml sleuth не сможет "настроить" шаблон уровня журнала как LOG_LEVEL_PATTERN тогда просто не существует в шаблоне.

Как указано в документации (https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto -logging ), вы всегда должны включать base. xml в свой пользовательский вход . xml, и все в порядке.

не рекомендуется: попытайтесь определить ваш шаблон уровня журнала как ${LOG_LEVEL_PATTERN:-%5p} вместо просто %5p или %-5level (но решение с включением базы. xml - правильное решение, если вы спросите меня.

также: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot -features-custom-log-configuration перечисляет поля приложения (свойства | yml) для настройки ведения журнала при начальной загрузке из свойств.

например, у меня есть пользовательский BaggageFields для распространения вниз по течению и мои application.properties, чтобы увидеть их в лог-файлах. Я определяю свойства приложения следующим образом: (я не определяю собственный logback. xml!)

для sleuth 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:-}]"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...