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

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

Barbara Streisand
Barbara Streisand原创
2024-12-04 00:09:10654浏览

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

在 Go 中记录请求和响应

在 Go 中创建复杂的应用程序时,有效处理 HTTP 请求和响应至关重要。虽然 Gorilla Web 工具包的 mux 和处理程序包简化了请求处理,但记录响应仍然是一个挑战。

为了解决这个问题,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))        

        // this copies the recorded response to the response writer
        for k, v := range rec.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(rec.Code)
        rec.Body.WriteTo(w)
    }
}

此修改后的代码会拦截响应并将其复制到响应编写器,从而启用请求和响应的日志记录。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn