記錄HTTP 請求和回應資料
在Go 中開發Web API 時,記錄傳入的HTTP 請求和傳出的HTTP 回應至關重要用於監控和調試。然而,預設的 http.ResponseWriter 介面並沒有提供一種便捷的方式來擷取寫入後的回應資料。
使用io.MultiWriter 擷取回應資料
一種解決方案是使用io.MultiWriter 函數建立一個寫入器,將其寫入複製到多個目標。這允許您在將回應傳送到客戶端的同時記錄回應。
<code class="go">func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer rsp := io.MultiWriter(w, &log) // Subsequent writes to rsp will be duplicated to both w and log ... }</code>
使用io.TeeReader 捕獲請求資料
捕獲傳入的HTTP 請求正文對於日誌記錄,您可以使用io.TeeReader 函數建立一個讀取器,該讀取器從原始請求正文中讀取數據,同時寫入單獨的緩衝區。
<code class="go">func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer tee := io.TeeReader(req.Body, &log) err := json.NewDecoder(tee).Decode(&requestData) ... }</code>
組合請求和回應資料進行日誌記錄
在各自的緩衝區中捕獲請求和回應資料後,您現在可以將它們組合成一條日誌訊息。
<code class="go">// Assuming we have set up log to be a logger with desired format and output log.Printf("%s %s %d %s %s", req.Method, req.URL.Path, req.Proto, log.BufioReader, log.Bytes())</code>
透過組合這些技術,您可以有效地捕獲並記錄傳入的 HTTP 請求和傳出的 HTTP 回應數據,為故障排除和監控 API 提供有價值的見解。
以上是如何在 Go API 中有效記錄 HTTP 請求和回應資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!