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

如何在 Go 中有效率地記錄 HTTP 請求和回應?

Barbara Streisand
Barbara Streisand原創
2024-12-04 00:09:10657瀏覽

How Can I Efficiently Log Both HTTP Requests and Responses in Go?

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

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