Spring Cloud Sleuth在WildFly10容器使用

最近一直在学习Spring Cloud,学习过程中也越发现它的强大,有很多功能都集成了,只是简单的引入对应的jar和简单的配置就能实现,但是在使用Sleuth时也产生了一些问题,最后在同事的帮助下终于解决了,作为辛苦排查了好长时间的问题记录下来。

背景

最近做的项目是在微服务基于Eureka注册发现的基础上开发的,但是领导想着能够在请求中增加一个标识用于贯穿整个交易过程,这样在排错过程中可以快速定位。

思考

设计方式是采用logback,在pattern中将uuid写入日志中,这样在一个交易中就可以实现日志输出了,但是在实际中遇到一个问题,当前服务是可以使用没有问题,如何传入到另外一个服务中去呢?

实现方式

  • 调用其他服务时作为参数传入;
  • 传输是放入到MDC中,在接收服务端定义拦截器进行拦截如果存在uuid则获取,若不存在则新创建;

其中第一种方式没有采用,原因是代码调整太多。
最终采用的是第二种方式,将uuid放入到MDC中这样就很方便的使用了。

遇到的问题

使用WildFly10部署项目后发现无法识别logback.xml文件,即无法是用logback的方式进行日志输出,查询资料说是wildFly10默认使用的是slf4j,然后有查询各种资料调整,但是都没有成功。

Sleuth

无奈只能寻找替换方案了,在Spring Cloud 中文网上看到一个日志收集包,于是开始查询文档对这个组件进行了解发现完美的解决了我的问题。

实现方式

在项目中引入spring-cloud-starter-sleuth包就可以了。

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

在实际部署项目到wildfly10中的时候却发现无法使用,不显示traceId、spanId相关信息。然后翻阅官方文档发现需要自己手动调整日志格式:

The SLF4J MDC is always set and logback users immediately see the trace and span IDs in logs per the example shown earlier. Other logging systems have to configure their own formatter to get the same result. The default is as follows: logging.pattern.level set to %5p [KaTeX parse error: Expected '}', got 'EOF' at end of input: …n.service.name:{spring.application. name:-}},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}] (this is a Spring Boot feature for logback users). If you do not use SLF4J, this pattern is NOT automatically applied.

开始被这段话给误导了所以在wildfly10的配置文件standalone.xml中的formatter name="PATTERN"部分直接添加了这句话

[%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]

然而并没有啥用,以为是要调整wildfly10的日志方式,所以一直在找替换方案,例如使用log4j2、logback等,最后还是没用花了好长时间,(┬_┬)
最后同事找到解决方式,其实就差一点,其他都不需要变更,只需要调整格式化方式由上边的方式调整为:

[TraceId:%X{traceId},SpanId:%X{spanId}]

终于搞定了~~~~~~

回顾

Spring Cloud Sleuth实际上也是采用的MDC的方式进行传输的,并且这个问题解决后,又想到最开始使用的MDC传输uuid的方式,既然Sleuth可以在日志中使用,那么自定义的也应该可以是用才对,在这说明下未测试,后续有时间加入测试用例。

  1. 定义一个Filter,在接收到请求时将uuid放入到MDC中
MDC.put("uuid",  UUID.randomUUID().toString())
  1. 在日志中获取uuid。
[uuid:%X{uuid}]

此种方式只是一个想法,后续有时间实际测试下。


二维码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨香异境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值