各位是怎么打印封装第三方 api 的出入参日志的呢

2021-09-30 12:54:37 +08:00
 zhongpingjing
之前是每个封装的 http 请求的方法都手动 log.info 去打印,感觉模版代码有点多

现在改用 RestTemplate 的拦截器机制,在拦截器里打印 request 跟 response,但是也发现有个问题,就是 response 的流被消费一次后,后面去获取 response 就会是空,通过复制一遍流(和使用 BufferingClientHttpRequestFactory )解决了。但是这样又有一个问题,这样会有性能损失,而且大 response 复制一遍会占用很多内存吧。

想请教各位平时是怎么打印第三方 api 的出入参的
2229 次点击
所在节点    Java
7 条回复
thetbw
2021-09-30 15:52:20 +08:00
用切片在方法上拦截,记录方法入参和返回值?
方法上没有标注的一般也是不重要的参数吧,如果是 token 之类的参数也需要记录,可以通过线程上下文来获取
shanghai1943
2021-09-30 16:06:20 +08:00
如果是出参里的 response entity 的话,可以试试 toString 后,返回 string 类型的数据,而不是返回流。
zhongpingjing
2021-09-30 16:17:31 +08:00
@shanghai1943 repsonse.getBody()就只返回流。。能返回 response entity 的话,已经走完拦截器了
zhongpingjing
2021-09-30 16:18:38 +08:00
@thetbw 切片好像没办法完全满足,有一些不在方法的参数,也不在上下文
thetbw
2021-10-01 13:57:55 +08:00
@zhongpingjing 那你这就是框架设计的问题了呀,http 协议本来也就没什么东西,非要自己把情况搞复杂。还能用 请求头传数据的吗,请求头的数据也是可以拿到的呀
sprite82
2021-10-01 14:24:02 +08:00
自己封装一个 httpclientutil,也就 get post,表单 json 两种入参,没几个方法,然后都用这 util 打印
zhongpingjing
2021-10-03 01:02:23 +08:00
@thetbw request 还好,主要是 response

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/805384

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX