Code Monkey home page Code Monkey logo

log-trace-spring-boot's Introduction

SpringBoot之微服务日志链路追踪

Maven Central License License License License

🔥🔥🔥相关文档请访问 PurgeTeam docs🔥🔥🔥

简介

在微服务里,业务出现问题或者程序出的任何问题,都少不了查看日志,一般我们使用 ELK 相关的日志收集工具,服务多的情况下,业务问题也是有些难以排查,只能确定大致时间定位相关日志。log-trace-spring-boot-starter 解决多个服务调用日志的问题,它可以将一个完整的调用链给整合为一个完整有序的日志。

支持组件:

  • zuul 调用
  • feign 调用
  • restTemplate 调用
  • dobbo 调用

日志输出格式:

2019-11-14 14:22:07.796  INFO [log-trace-service-a-demo,ac8ffaaed5f343da,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-7] c.p.l.t.service.a.demo.TestController    : controller test2 执行 ac8ffaaed5f343da
2019-11-14 14:23:15.569  INFO [log-trace-service-a-demo,04cf5392dc5c4881,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-9] c.p.l.t.service.a.demo.TestController    : controller test2 执行 04cf5392dc5c4881
2019-11-14 14:24:44.183  INFO [log-trace-service-a-demo,86b5c555ce4f4451,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-1] c.p.l.t.service.a.demo.TestController    : controller test2 执行 86b5c555ce4f4451

我们可以通过 86b5c555ce4f4451 id 进行查询链路上的所有日志信息。

log-trace-service-a-demo 为当前应用。 log-trace-zuul-demo 为上游应用。

当然这些参数可以基于业务定制的。

功能使用

添加依赖

ps: 实际version版本请使用最新版 最新版本: Maven Central

点击查看最新新版本

<dependency>
  <groupId>com.purgeteam</groupId>
  <artifactId>log-trace-spring-boot-starter</artifactId>
  <version>0.1.2.RELEASE</version>
</dependency>

ps: 请基于 SpirngBoot2.1.x 版本使用

配置应用

这里以3个微服务来举例子。

  1. log-trace-zuul-demo 充当网关功能
  2. log-trace-service-a-demo 充当服务A
  3. log-trace-service-b-demo 充当服务B

调用链路为:

log-trace-zuul-demo -> log-trace-service-a-demo TestController#test -> log-trace-service-b-demo TestController#test

访问网关地址: http://127.0.0.1:8000/a/test

网关日志如下:

2019-11-14 14:27:37.434 DEBUG [33b07a9c5f324375,this] 89996 --- [nio-8000-exec-1] c.p.l.t.s.i.zuul.TracePreZuulFilter      : zuul traceid 33b07a9c5f324375

网关转发至服务A

服务A 日志如下:

2019-11-14 14:27:37.476  INFO [log-trace-service-a-demo,33b07a9c5f324375,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-5] c.p.l.t.service.a.demo.TestController    : controller test2 执行 33b07a9c5f324375

服务A 调用 服务B

服务B 日志如下:

2019-11-14 14:27:37.478  INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.t.servcie.b.demo.TestController    : header traceId 33b07a9c5f324375
2019-11-14 14:27:37.478  INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.t.servcie.b.demo.TestController    : controller test 执行 33b07a9c5f324375
2019-11-14 14:27:37.478  INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.trace.servcie.b.demo.TestService   : test 方法执行 33b07a9c5f324375
2019-11-14 14:27:37.478  INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.trace.servcie.b.demo.TestService   : test1 方法执行 33b07a9c5f324375

这样可以在第三方日志平台按照一个id进行查询了。

ELK 通过 33b07a9c5f324375 id 查询出相关的所有链路调用。

配置输出格式

目前支持以上参数:

X-B3-ParentName 上游服务名称
X-B3-TraceId 为一个请求分配的ID号,用来标识一条请求链路。

通过 application.properties 进行配置。

spring.trace.log.format=X-B3-TraceId,X-B3-ParentName


`spring.trace.log.format` 配置参数顺序将影响日志输出格式。

不配置将按照默认格式输出。

日志输出如下:

2019-11-14 14:27:37.434 DEBUG [33b07a9c5f324375,this] 89996 --- [nio-8000-exec-1] c.p.l.t.s.i.zuul.TracePreZuulFilter      : zuul traceid 33b07a9c5f324375

总结

目前实现了日志连贯的功能,后续将支持定制输出 比如按照登陆人员id进行输出,方便追踪用户行为。 框架方便后续支持 Dubbo 等。

示例代码地址:log-trace-spring-boot

作者GitHub: Purgeyao 欢迎关注

qq交流群: 812321371 微信交流群: MercyYao

微信公众号:

微信公众号二维码

log-trace-spring-boot's People

Contributors

purgeyao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

log-trace-spring-boot's Issues

重构拦截逻辑

希望封装拦截逻辑,不依赖具体实例拦截器。
编写共用拦截实现万物皆可拦截概念。

使用log4j2替代springboot自带的logback之后,log4j2.xml写的pattern是按照TraceEnvironmentPostProcessor#LEVEL_STR_ORIGINAL,运行时没有打印application name, X-B3-TraceId等信息

使用log4j2替代springboot自带的logback之后,log4j2.xml写的pattern是按照TraceEnvironmentPostProcessor#LEVEL_STR_ORIGINAL,运行时没有打印application name, X-B3-TraceId等信息

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency> <!-- 引入log4j2依赖 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:52032,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:/Users/purgeyao/Library/Caches/JetBrains/IntelliJIdea2020.1/captureAgent/debugger-agent.jar -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/tools.jar:/Volumes/CodeFile/GitHub/purgeteam/log-trace-spring-boot/log-trace-spring-boot-demo/log-trace-demo/log-trace-springboot-2.1.x-demo/log-trace-service-a-demo/target/classes:/Volumes/Code/maven-jar/alibaba/repository/com/purgeteam/log-trace-spring-boot-starter/0.1.2.RELEASE/log-trace-spring-boot-starter-0.1.2.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/slf4j/slf4j-api/1.7.28/slf4j-api-1.7.28.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/boot/spring-boot-starter-web/2.1.8.RELEASE/spring-boot-starter-web-2.1.8.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/boot/spring-boot-starter/2.1.8.RELEASE/spring-boot-starter-2.1.8.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/boot/spring-boot/2.1.8.RELEASE/spring-boot-2.1.8.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/boot/spring-boot-autoconfigure/2.1.8.RELEASE/spring-boot-autoconfigure-2.1.8.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/spring-core/5.1.9.RELEASE/spring-core-5.1.9.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/spring-jcl/5.1.9.RELEASE/spring-jcl-5.1.9.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/yaml/snakeyaml/1.23/snakeyaml-1.23.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/boot/spring-boot-starter-json/2.1.8.RELEASE/spring-boot-starter-json-2.1.8.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/com/fasterxml/jackson/core/jackson-databind/2.9.9.3/jackson-databind-2.9.9.3.jar:/Volumes/Code/maven-jar/alibaba/repository/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar:/Volumes/Code/maven-jar/alibaba/repository/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar:/Volumes/Code/maven-jar/alibaba/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar:/Volumes/Code/maven-jar/alibaba/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar:/Volumes/Code/maven-jar/alibaba/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.9/jackson-module-parameter-names-2.9.9.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/boot/spring-boot-starter-tomcat/2.1.8.RELEASE/spring-boot-starter-tomcat-2.1.8.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.24/tomcat-embed-core-9.0.24.jar:/Volumes/Code/maven-jar/alibaba/repository/org/apache/tomcat/embed/tomcat-embed-el/9.0.24/tomcat-embed-el-9.0.24.jar:/Volumes/Code/maven-jar/alibaba/repository/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.24/tomcat-embed-websocket-9.0.24.jar:/Volumes/Code/maven-jar/alibaba/repository/org/hibernate/validator/hibernate-validator/6.0.17.Final/hibernate-validator-6.0.17.Final.jar:/Volumes/Code/maven-jar/alibaba/repository/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar:/Volumes/Code/maven-jar/alibaba/repository/org/jboss/logging/jboss-logging/3.3.3.Final/jboss-logging-3.3.3.Final.jar:/Volumes/Code/maven-jar/alibaba/repository/com/fasterxml/classmate/1.4.0/classmate-1.4.0.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/spring-web/5.1.9.RELEASE/spring-web-5.1.9.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/spring-beans/5.1.9.RELEASE/spring-beans-5.1.9.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/spring-webmvc/5.1.9.RELEASE/spring-webmvc-5.1.9.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/spring-context/5.1.9.RELEASE/spring-context-5.1.9.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/spring-expression/5.1.9.RELEASE/spring-expression-5.1.9.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/boot/spring-boot-starter-log4j2/2.1.8.RELEASE/spring-boot-starter-log4j2-2.1.8.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.11.2/log4j-slf4j-impl-2.11.2.jar:/Volumes/Code/maven-jar/alibaba/repository/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2.jar:/Volumes/Code/maven-jar/alibaba/repository/org/apache/logging/log4j/log4j-core/2.11.2/log4j-core-2.11.2.jar:/Volumes/Code/maven-jar/alibaba/repository/org/apache/logging/log4j/log4j-jul/2.11.2/log4j-jul-2.11.2.jar:/Volumes/Code/maven-jar/alibaba/repository/org/slf4j/jul-to-slf4j/1.7.28/jul-to-slf4j-1.7.28.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/boot/spring-boot-starter-aop/2.1.8.RELEASE/spring-boot-starter-aop-2.1.8.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/spring-aop/5.1.9.RELEASE/spring-aop-5.1.9.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/aspectj/aspectjweaver/1.9.4/aspectjweaver-1.9.4.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/cloud/spring-cloud-starter-openfeign/2.1.0.RELEASE/spring-cloud-starter-openfeign-2.1.0.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/cloud/spring-cloud-starter/2.1.0.RELEASE/spring-cloud-starter-2.1.0.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/cloud/spring-cloud-context/2.1.0.RELEASE/spring-cloud-context-2.1.0.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/security/spring-security-rsa/1.0.7.RELEASE/spring-security-rsa-1.0.7.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/bouncycastle/bcpkix-jdk15on/1.60/bcpkix-jdk15on-1.60.jar:/Volumes/Code/maven-jar/alibaba/repository/org/bouncycastle/bcprov-jdk15on/1.60/bcprov-jdk15on-1.60.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/cloud/spring-cloud-openfeign-core/2.1.0.RELEASE/spring-cloud-openfeign-core-2.1.0.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/cloud/spring-cloud-netflix-ribbon/2.1.0.RELEASE/spring-cloud-netflix-ribbon-2.1.0.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/cloud/spring-cloud-netflix-archaius/2.1.0.RELEASE/spring-cloud-netflix-archaius-2.1.0.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/io/github/openfeign/form/feign-form-spring/3.5.0/feign-form-spring-3.5.0.jar:/Volumes/Code/maven-jar/alibaba/repository/io/github/openfeign/form/feign-form/3.5.0/feign-form-3.5.0.jar:/Volumes/Code/maven-jar/alibaba/repository/commons-fileupload/commons-fileupload/1.3.3/commons-fileupload-1.3.3.jar:/Volumes/Code/maven-jar/alibaba/repository/commons-io/commons-io/2.2/commons-io-2.2.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/cloud/spring-cloud-commons/2.1.0.RELEASE/spring-cloud-commons-2.1.0.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/security/spring-security-crypto/5.1.6.RELEASE/spring-security-crypto-5.1.6.RELEASE.jar:/Volumes/Code/maven-jar/alibaba/repository/io/github/openfeign/feign-core/10.1.0/feign-core-10.1.0.jar:/Volumes/Code/maven-jar/alibaba/repository/io/github/openfeign/feign-slf4j/10.1.0/feign-slf4j-10.1.0.jar:/Volumes/Code/maven-jar/alibaba/repository/io/github/openfeign/feign-hystrix/10.1.0/feign-hystrix-10.1.0.jar:/Volumes/Code/maven-jar/alibaba/repository/com/netflix/archaius/archaius-core/0.7.6/archaius-core-0.7.6.jar:/Volumes/Code/maven-jar/alibaba/repository/com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1.jar:/Volumes/Code/maven-jar/alibaba/repository/commons-configuration/commons-configuration/1.8/commons-configuration-1.8.jar:/Volumes/Code/maven-jar/alibaba/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar:/Volumes/Code/maven-jar/alibaba/repository/com/google/guava/guava/16.0/guava-16.0.jar:/Volumes/Code/maven-jar/alibaba/repository/com/netflix/hystrix/hystrix-core/1.5.18/hystrix-core-1.5.18.jar:/Volumes/Code/maven-jar/alibaba/repository/io/reactivex/rxjava/1.3.8/rxjava-1.3.8.jar:/Volumes/Code/maven-jar/alibaba/repository/org/hdrhistogram/HdrHistogram/2.1.9/HdrHistogram-2.1.9.jar:/Volumes/Code/maven-jar/alibaba/repository/org/projectlombok/lombok/1.18.8/lombok-1.18.8.jar:/Volumes/Code/maven-jar/alibaba/repository/org/springframework/boot/spring-boot-configuration-processor/2.1.8.RELEASE/spring-boot-configuration-processor-2.1.8.RELEASE.jar:/Users/purgeyao/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/201.6668.121/IntelliJ IDEA.app/Contents/lib/idea_rt.jar com.purgeteam.log.trace.service.a.demo.TraceServiceASpringBootApplication
Connected to the target VM, address: '127.0.0.1:52032', transport: 'socket'
2020-05-29 10:29:19.482  INFO 98017 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$55559813] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.8.RELEASE)

2020-05-29 10:29:19.610  INFO 98017 --- [           main] s.a.d.TraceServiceASpringBootApplication : No active profile set, falling back to default profiles: default
2020-05-29 10:29:20.058  INFO 98017 --- [           main] o.s.c.c.s.GenericScope                   : BeanFactory id=0d902bca-fa5c-3361-8b7b-c87fb115eee4
2020-05-29 10:29:20.064  INFO 98017 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'com.purgerteam.log.trace.starter.instrument.resttemplate.TraceRestTemplateConfiguration' of type [com.purgerteam.log.trace.starter.instrument.resttemplate.TraceRestTemplateConfiguration$$EnhancerBySpringCGLIB$$92d19ba6] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-05-29 10:29:20.077  INFO 98017 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'com.purgeteam.log.trace.service.a.demo.TestFeign' of type [org.springframework.cloud.openfeign.FeignClientFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-05-29 10:29:20.078  INFO 98017 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'com.purgerteam.log.trace.starter.TraceAutoConfiguration' of type [com.purgerteam.log.trace.starter.TraceAutoConfiguration$$EnhancerBySpringCGLIB$$93de17ac] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-05-29 10:29:20.081  INFO 98017 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'traceContentUtil' of type [com.purgerteam.log.trace.starter.TraceContentFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-05-29 10:29:20.166  INFO 98017 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$55559813] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-05-29 10:29:20.414  INFO 98017 --- [           main] o.s.b.w.e.t.TomcatWebServer              : Tomcat initialized with port(s): 8081 (http)
2020-05-29 10:29:20.434  INFO 98017 --- [           main] o.a.c.c.StandardService                  : Starting service [Tomcat]
2020-05-29 10:29:20.434  INFO 98017 --- [           main] o.a.c.c.StandardEngine                   : Starting Servlet engine: [Apache Tomcat/9.0.24]
2020-05-29 10:29:20.519  INFO 98017 --- [           main] o.a.c.c.C.[.[.[/]                        : Initializing Spring embedded WebApplicationContext
2020-05-29 10:29:20.519  INFO 98017 --- [           main] o.s.w.c.ContextLoader                    : Root WebApplicationContext: initialization completed in 887 ms
2020-05-29 10:29:20.842  WARN 98017 --- [           main] c.n.c.s.URLConfigurationSource           : No URLs will be polled as dynamic configuration sources.
2020-05-29 10:29:20.842  INFO 98017 --- [           main] c.n.c.s.URLConfigurationSource           : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2020-05-29 10:29:20.846  WARN 98017 --- [           main] c.n.c.s.URLConfigurationSource           : No URLs will be polled as dynamic configuration sources.
2020-05-29 10:29:20.846  INFO 98017 --- [           main] c.n.c.s.URLConfigurationSource           : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2020-05-29 10:29:20.978  INFO 98017 --- [           main] o.s.s.c.ThreadPoolTaskExecutor           : Initializing ExecutorService 'applicationTaskExecutor'
2020-05-29 10:29:21.223  INFO 98017 --- [           main] o.s.b.w.e.t.TomcatWebServer              : Tomcat started on port(s): 8081 (http) with context path ''
2020-05-29 10:29:21.226  INFO 98017 --- [           main] s.a.d.TraceServiceASpringBootApplication : Started TraceServiceASpringBootApplication in 2.613 seconds (JVM running for 3.505)
2020-05-29 10:29:21.227  INFO 98017 --- [           main] s.a.d.TraceServiceASpringBootApplication : 启动

异步发送restTemplate请求获取不到MDC内容

客户端:
TraceContentFactory#buildTraceContent 异步获取MDC.getCopyOfContextMap();
导致这个线程无法获取到id,因此只有服务名加入Map<String, String> traceContentMap进行发送。

服务端:
客户端异步发送只发送了服务名称,导致TraceContentFactory#storageMDC 方法重新生成id,
// "ParentName" 根据 headerTraceId 判断为空 赋值为 this

    public static void storageMDC(Map<String, String> traceContentMap) {
        String headerTraceId = traceContentMap.get(Constants.LEGACY_TRACE_ID_NAME);
        log.debug("Trace traceId {}", headerTraceId);
        // 如果为空,则表示第一次访问,即上游服务端的请求
        if (StringUtils.isEmpty(headerTraceId)) {
            MDC.put(Constants.LEGACY_TRACE_ID_NAME, TraceIdUtil.traceIdString());
        } else {
            MDC.put(Constants.LEGACY_TRACE_ID_NAME, headerTraceId);
        }

        // "ParentName"
        String headerParentName = traceContentMap.get(Constants.LEGACY_PARENT_SERVICE_NAME);
        if (StringUtils.isEmpty(headerTraceId)) {
            MDC.put(Constants.LEGACY_PARENT_SERVICE_NAME, "this");
        } else {
            MDC.put(Constants.LEGACY_PARENT_SERVICE_NAME, headerParentName);
        }
    }

支持参数定制化

希望加入log id 打印为用户账号等信息。
结合相关业务标识id,支持定制化。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.