V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhongpingjing
V2EX  ›  Java

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

  •  
  •   zhongpingjing · 2021-09-30 12:54:37 +08:00 · 2265 次点击
    这是一个创建于 1185 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前是每个封装的 http 请求的方法都手动 log.info 去打印,感觉模版代码有点多

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

    想请教各位平时是怎么打印第三方 api 的出入参的
    7 条回复    2021-10-03 01:02:23 +08:00
    thetbw
        1
    thetbw  
       2021-09-30 15:52:20 +08:00
    用切片在方法上拦截,记录方法入参和返回值?
    方法上没有标注的一般也是不重要的参数吧,如果是 token 之类的参数也需要记录,可以通过线程上下文来获取
    shanghai1943
        2
    shanghai1943  
       2021-09-30 16:06:20 +08:00
    如果是出参里的 response entity 的话,可以试试 toString 后,返回 string 类型的数据,而不是返回流。
    zhongpingjing
        3
    zhongpingjing  
    OP
       2021-09-30 16:17:31 +08:00
    @shanghai1943 repsonse.getBody()就只返回流。。能返回 response entity 的话,已经走完拦截器了
    zhongpingjing
        4
    zhongpingjing  
    OP
       2021-09-30 16:18:38 +08:00
    @thetbw 切片好像没办法完全满足,有一些不在方法的参数,也不在上下文
    thetbw
        5
    thetbw  
       2021-10-01 13:57:55 +08:00
    @zhongpingjing 那你这就是框架设计的问题了呀,http 协议本来也就没什么东西,非要自己把情况搞复杂。还能用 请求头传数据的吗,请求头的数据也是可以拿到的呀
    sprite82
        6
    sprite82  
       2021-10-01 14:24:02 +08:00 via Android
    自己封装一个 httpclientutil,也就 get post,表单 json 两种入参,没几个方法,然后都用这 util 打印
    zhongpingjing
        7
    zhongpingjing  
    OP
       2021-10-03 01:02:23 +08:00
    @thetbw request 还好,主要是 response
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2715 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:39 · PVG 20:39 · LAX 04:39 · JFK 07:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.