如何使用 Grails 3 记录请求和响应 (headers+body)?

How to log request and response (headers+body) using Grails 3?

我正在寻找在 Grails 3 应用程序中记录传入请求和返回响应 (headers+body) 的方法。 Grails 有拦截器的概念,但在这些拦截器中我无法读取 body 因为 body 只能读取一次。因此,如果我在拦截器中执行此操作,那么正常的控制器逻辑将失败,并显示一个错误,指示流已关闭。

我还试图找到如何使用 SpringBoot 完成此操作的方法,因为 Grails 实际上是基于 SpringBoot 的。

关于如何在 Grails 3 应用程序中完成此操作的任何提示?

我建议采用以下方法(当我需要类似功能时,还没有找到任何可用于 spring-boot 的东西,所以我决定自己动手):

  • 实现一个 HttpServletRequestWrapper,它将在 InputStream 被消耗时复制字节,因此您可以多次重新读取请求正文

  • 实现并注册一个Filter,它将在请求被使用并且响应由端点

好处是您可以在一个日志语句中同时记录请求和响应,将它们一起保存在日志文件中。