【问题标题】:How to log request and response (headers+body) using Grails 3?如何使用 Grails 3 记录请求和响应(标头+正文)?
【发布时间】:2016-02-23 04:31:45
【问题描述】:

我正在寻找在 Grails 3 应用程序中记录传入请求和返回响应(标头+正文)的方法。 Grails 有拦截器的概念,但在这些拦截器中,我无法读取主体,因为主体只能读取一次。因此,如果我在拦截器中执行此操作,则正常的控制器逻辑将失败,并出现错误,表明流已关闭。

我还尝试寻找如何使用 SpringBoot 来完成这项工作,因为 Grails 实际上是基于 SpringBoot。

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

【问题讨论】:

    标签: grails spring-boot grails-3.0


    【解决方案1】:

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

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

    • 实现并注册一个Filter,它将在进入的过程中包装http请求,并在请求被消耗并由端点产生响应后记录完整的请求/响应

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

    【讨论】:

    • 您能否提供一个有关如何实现过滤器的示例。
    • 我们可以参考SpringSecurityCoreGrailsPlugin的DebugFilter类来实现我们自己的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2017-02-21
    • 2019-02-17
    • 2021-07-21
    • 2019-05-17
    • 2019-10-02
    相关资源
    最近更新 更多