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