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