在 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中文网其他相关文章!