我正在寻找在Grails 3应用程序中记录传入请求和返回响应(标题+正文)的方法。 Grails有拦截器的概念,但在这些拦截器中,我无法读取身体,因为身体只能读一次。因此,如果我在拦截器中执行此操作,则正常的控制器逻辑会失败,并显示一条错误,指示该流已经关闭。
我还试图找到如何使用SpringBoot来实现这一点的方法,因为Grails实际上是基于SpringBoot。
有关如何在Grails 3应用程序中完成此操作的任何提示?
答案 0 :(得分:1)
我建议使用以下方法(当我需要类似的功能时,没有找到任何可用于spring-boot的东西,所以我决定自己动手):
实施HttpServletRequestWrapper
,会在InputStream
消耗时复制字节,以便您可以多次重读请求正文
实现并注册Filter
,它将在进入途中包装http请求,并在请求被消耗后记录完整的请求/响应,并且响应由端点生成
很好的奖励是您可以在一个日志记录语句中记录请求和响应,并将它们保存在日志文件中。