繁体   English   中英

RestTemplate 日志拦截器 + Spring Cloud Sleuth

[英]RestTemplate logging interceptor + Spring Cloud Sleuth

我创建了一个RestTemplate拦截器 ( ClientHttpRequestInterceptor ) 来记录请求和响应,并启用了 Spring Cloud Sleuth,目的是跟踪从拦截器收到请求到返回结果的事务。 但是,Sleuth 的 trace 和 span id 不会出现在拦截器日志消息中; 他们似乎只是在处理请求的后期阶段。 我希望能够追踪到没有显式日志记录的服务,所以拦截器似乎是一个好方法,但如果在这个阶段没有办法添加跟踪和跨度 ID,那么我可能需要找到另一种方法. 寻找任何建议,将跟踪和跨度添加到拦截器日志消息中,或者以其他方式记录跨服务的请求和响应,并使用跟踪和跨度 ID。 谢谢!

编辑:这是日志 output 的示例,我目前从我的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/….

我真正想得到的是使用 Sleuth tracespan ID 记录的请求(或响应):

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 跟踪记录所有请求和响应/跨度ID。 我将不胜感激任何建议!

编辑 2 :更多信息......此时我的 Sleuth 配置只不过是在bootstrap.yml文件中启用它:

spring:
    cloud:
        sleuth:
            enabled: true

我还创建/配置了一个自定义CommonsRequestLoggingFilter ,它在拦截器之后执行(它是日志中的下一行)并且在其日志消息中确实有跟踪/跨度 ID:

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 添加到拦截器的日志消息中。 谢谢!

侦探文件说

您必须将 RestTemplate 注册为 bean,以便注入拦截器。 如果您使用新关键字创建 RestTemplate 实例,则检测将不起作用。

我希望你没有使用new关键字来实例化 RestTemplate。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM