使用 Go 和 Gorilla 记录 HTTP 响应
使用 Go 和 Gorilla Web 工具包构建复杂的 Web 应用程序时,记录 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)) // 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) } }
要使用此函数,只需用 logHandler 包装您的处理函数:
http.HandleFunc("/", logHandler(myHandler))
此修改可确保记录请求和响应,同时仍然正确地将响应传递给客户端。
以上是如何使用 Gorilla Mux 在 Go 中有效记录 HTTP 请求和响应?的详细内容。更多信息请关注PHP中文网其他相关文章!