如何使用 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
,它将在请求被使用并且响应由端点
好处是您可以在一个日志语句中同时记录请求和响应,将它们一起保存在日志文件中。
我正在寻找在 Grails 3 应用程序中记录传入请求和返回响应 (headers+body) 的方法。 Grails 有拦截器的概念,但在这些拦截器中我无法读取 body 因为 body 只能读取一次。因此,如果我在拦截器中执行此操作,那么正常的控制器逻辑将失败,并显示一个错误,指示流已关闭。
我还试图找到如何使用 SpringBoot 完成此操作的方法,因为 Grails 实际上是基于 SpringBoot 的。
关于如何在 Grails 3 应用程序中完成此操作的任何提示?
我建议采用以下方法(当我需要类似功能时,还没有找到任何可用于 spring-boot 的东西,所以我决定自己动手):
实现一个
HttpServletRequestWrapper
,它将在InputStream
被消耗时复制字节,因此您可以多次重新读取请求正文实现并注册一个
Filter
,它将在请求被使用并且响应由端点
好处是您可以在一个日志语句中同时记录请求和响应,将它们一起保存在日志文件中。