首頁 >後端開發 >Golang >如何使用 Gorilla Mux 在 Go 中有效記錄 HTTP 請求和回應?

如何使用 Gorilla Mux 在 Go 中有效記錄 HTTP 請求和回應?

Susan Sarandon
Susan Sarandon原創
2024-12-03 00:06:14326瀏覽

How Can I Effectively Log Both HTTP Requests and Responses in Go with Gorilla Mux?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn