從http.ResponseWriter 記錄資料
在Go 中,您可以使用各種技術來記錄從HTTP 請求-回應週期發出的數據。一個常見問題是取得寫入 http.ResponseWriter 的資料以用於日誌記錄。
解決方案:使用 io.MultiWriter
要擷取回應數據,您可以使用io.MultiWriter 將寫入複製到單獨的寫入器。在程式碼中,您可以建立一個新的 bytes.Buffer 實例作為日誌緩衝區,並將其作為寫入器之一傳遞給 io.MultiWriter。透過使用 MultiWriter 作為回應編寫器,您可以將回應資料複製到日誌緩衝區。
程式碼範例:
<code class="go">import ( "bytes" "io" "net/http" ) func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer rsp := io.MultiWriter(w, &log) // Use rsp instead of w from this point onward // ... }</code>
現在,日誌緩衝區 ( log)將包含寫入回應編寫器的回應資料的副本。
替代解決方案:使用 io.TeeReader
要捕獲請求數據,您可以使用io.TeeReader。它創建一個讀取器,將從給定讀取器讀取的任何內容寫入到提供的寫入器。在這種情況下,您可以使用它在日誌緩衝區中保存請求正文的副本。
程式碼範例:
<code class="go">import ( "bytes" "io" "net/http" ) func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer tee := io.TeeReader(req.Body, &log) // Use tee instead of req.Body from this point onward // ... }</code>
使用 io.TeeReader,日誌緩衝區將包含要求正文內容的副本。
透過利用這些技術,您可以記錄請求和回應數據,從而促進 API 請求的全面日誌記錄。
以上是如何在 Go 中記錄來自 http.ResponseWriter 的回應資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!