记录 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) } }
此修改后的函数实现了以下功能:
通过将此修改后的函数集成到您的应用程序中,您可以无缝记录请求和响应,从而提供 HTTP 的全面视图沟通。
以上是如何在 Go 中有效记录 HTTP 请求和响应?的详细内容。更多信息请关注PHP中文网其他相关文章!