restemplate日志拦截器+springcloudsleuth

r8uurelv  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(405)

我创造了一个 RestTemplate 拦截器( ClientHttpRequestInterceptor )记录请求和响应,并启用springcloudsleuth,目标是跟踪从拦截器接收到请求到返回结果的事务。但是,sleuth的trace和span id不会出现在拦截器日志消息中;似乎他们只是在处理请求的后期阶段。我希望能够跟踪到没有显式日志记录的服务,因此拦截器似乎是一个很好的方法,但是如果在这个阶段没有办法添加跟踪和span id,那么我可能需要找到另一种方法。寻找任何建议,要么将trace和span添加到拦截器日志消息中,要么使用trace和span id记录跨服务的请求和响应。谢谢!
编辑:下面是一个我当前从 RestTemplate 启用了spring cloud sleuth的拦截器:

2020-08-21 18:53:17.164 DEBUG [,,,] 14256 --- [           main] .c.o.l.RequestResponseLoggingInterceptor : ⇒ HTTP REQUEST: METHOD 'POST', URI 'http://localhost:59742/….

我真正想得到的是与侦探一起记录的请求(或repsonse) trace 以及 span 身份证号码:

2020-08-21 18:53:17.164 DEBUG [my-service-name,d3cb8a2fa7d1d9ac,80b023cb829bf254,false] 14256 --- [           main] .c.o.l.RequestResponseLoggingInterceptor : ⇒ HTTP REQUEST: METHOD 'POST', URI 'http://localhost:59742/….

我想知道这是否可行(即通过 RestTemplate 拦截器并让那些日志消息包含sleuth id),或者是否有其他方法可以使用sleuth trace/span id记录所有请求和响应。如有任何建议,我将不胜感激!
编辑2:更多的信息…我的侦探配置在这一点上只不过是在一个 bootstrap.yml 文件:

spring:
    cloud:
        sleuth:
            enabled: true

我还创建/配置了一个自定义 CommonsRequestLoggingFilter ,它在拦截器之后执行(它是日志中的下一行),并且在其日志消息中有trace/span标识:

2020-08-21 18:53:17.164 DEBUG [my-app,d3cb8a2fa7d1d9ac,80b023cb829bf254,false] 3479 --- [c-auto-1-exec-2] c.t.c.o.l.CustomRequestLoggingFilter  : ⇒ POST ...

因此,sleuth似乎配置正确(至少就我现在的目的而言);它只是没有将跟踪ID添加到拦截器的日志消息中。谢谢!

iszxjhcz

iszxjhcz1#

侦探文件说
您必须将restemplate注册为bean,这样拦截器才能被注入。如果使用新关键字创建resttemplate示例,则插装将不起作用。
我希望你没有用 new 关键字来示例化resttemplate。

相关问题