跟踪 ID 未显示在控制器级别日志中(Spring 启动、Jaeger 配置) [英] Trace id is not shown on controller level log (Spring boot, Jaeger configuration)

查看:67
本文介绍了跟踪 ID 未显示在控制器级别日志中(Spring 启动、Jaeger 配置)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

语言:Java

框架:Spring Boot

工具:Jaeger

我已经完成了以下配置以将整个跟踪记录在日志上.但在控制器级别日志没有显示跟踪.当执行休眠查询时比跟踪放在日志上(在服务和存储库级别日志上)

I have done the following configuration for put whole trace on logs. But at controller level log not shown a trace. when hibernate query executed than after trace is put on logs(on service and repository level logs)

应用程序日志

2019-11-08 05:14  INFO [iHub-service,] [http-nio-8080-exec-27] INFO  c.s.controller.Controller ...............message.............
2019-11-08 05:14 DEBUG [iHub-service,294d434a24290786:294d434a24290786:0:1 - ] [http-nio-8080-exec-27] DEBUG org.hibernate.SQL logStatement - Hibernate query
Hibernate: hibernate query.........
2019-11-08 05:14  INFO [iHub-service,294d434a24290786:294d434a24290786:0:1 - ] [http-nio-8080-exec-27] INFO  i.j.i.reporters.LoggingReporter report - Span reported: b9b799296f2b2dda:7aa285d9c044dce6:b9b799296f2b2dda:1 - Query
2019-11-08 05:14 DEBUG [iHub-service,b9b799296f2b2dda:7aa285d9c044dce6:b9b799296f2b2dda:1 - Query] [http-nio-8080-exec-27] DEBUG org.hibernate.SQL logStatement - hibernate query
Hibernate: hibernate query...........

记者类

public class MDCReporter implements Reporter {

    public MDCReporter() {
        // default constructor
    }

    @Override
    public void report(JaegerSpan span) {
        MDC.put("traceinfo", span);
    }

Appender 类

public class JaegerReportAppender implements ReporterAppender {

    public JaegerReportAppender() {
        // default constructor
    }

    @Override
    public void append(Collection<Reporter> reporters) {
        reporters.add(new MDCReporter());

    }
}

主要的spring boot类

Main spring boot class

@SpringBootApplication
public class Service1Application {

    public static void main(String[] args) {
        SpringApplication.run(Service1Application.class, args);
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean
    JaegerReportAppender customLoggingReporter() {
        return new JaegerReportAppender();
    }

}

应用程序属性

    opentracing.jaeger.http-sender.url = http://localhost:14268/api/traces
    logging.pattern.console=%d{yyyy-MM-dd HH:mm} %5p [${spring.application.name},%X{traceinfo:-}] [%thread] %-5level %logger{36} %M - %msg%
    spring.sleuth.opentracing.enabled=false

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.solanki</groupId>
    <artifactId>Service-2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Service-2</name>
    <description>service-1</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.opentracing.contrib/opentracing-spring-jaeger-cloud-starter -->
        <dependency>
            <groupId>io.opentracing.contrib</groupId>
            <artifactId>opentracing-spring-jaeger-cloud-starter</artifactId>
            <version>2.0.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

推荐答案

不幸的是,reporter 接口用于报告 FINISHED spans,它是在 JaegerSpan.finish 上调用的.我想这就是它没有出现在日志中的原因.

Unfortunatelly, the reporter interface is used to report FINISHED spans, it is invoked on JaegerSpan.finish. I presume this is why it does not appear in logs.

这篇关于跟踪 ID 未显示在控制器级别日志中(Spring 启动、Jaeger 配置)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆