首页 > 后端开发 > Golang > 如何在 Go 中有效记录 HTTP 请求和响应?

如何在 Go 中有效记录 HTTP 请求和响应?

Barbara Streisand
发布: 2024-12-05 21:57:12
原创
766 人浏览过

How Can I Effectively Log Both HTTP Requests and Responses in Go?

记录 HTTP 响应增强功能

记录 HTTP 请求是调试和性能监控的一个重要方面。虽然有像 Gorilla 的 LoggingHandler 这样的解决方案用于记录请求,但记录响应通常是一项被忽视的任务。

为了解决这个问题,让我们探索 Eric Broda 接受的答案的修改版本,该版本既记录响应并将其转发给客户端:

func logHandler(fn http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        x, err := httputil.DumpRequest(r, true)
        if err != nil {
            http.Error(w, fmt.Sprint(err), http.StatusInternalServerError)
            return
        }
        log.Println(fmt.Sprintf("%q", x))
        rec := httptest.NewRecorder()
        fn(rec, r)
        log.Println(fmt.Sprintf("%q", rec.Body))

        // Forward the response to the client
        for k, v := range rec.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(rec.Code)
        rec.Body.WriteTo(w)
    }
}
登录后复制

此修改后的函数实现了以下功能:

  • 将请求记录为之前。
  • 创建一个 httptest.NewRecorder 来捕获响应。
  • 调用原始处理函数,该函数将响应写入记录器。
  • 记录来自记录器的响应.
  • 将记录器的标头和状态代码复制到实际响应writer。
  • 将记录器的正文转发给客户端。

通过将此修改后的函数集成到您的应用程序中,您可以无缝记录请求和响应,从而提供 HTTP 的全面视图沟通。

以上是如何在 Go 中有效记录 HTTP 请求和响应?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板