首頁 > 後端開發 > Golang > 主體

如何使用中介軟體鏈在 Go 中記錄 HTTP 回應?

DDD
發布: 2024-10-28 08:55:29
原創
127 人瀏覽過

How to Log HTTP Responses in Go with Middleware Chaining?

在http.HandleFunc 中記錄傳入HTTP 請求的回應

為了回答上一個執行緒中提出的問題,本文建議記錄來自即時伺服器的HTTP 回應,而無需求助偽造請求。目標是捕獲標頭和 JSON 有效負載以進行徹底分析。

利用中間件連結的概念,我們可以建立一個自訂 HTTP 處理程序來攔截回應並記錄相關資訊。具體方法如下:

中間件連結方法

透過中間件鏈接,您可以定義可以在主處理程式函數之前或之後執行的中間件函數。這些中間件可以執行各種任務,例如日誌記錄、驗證或安全檢查。

實作功能處理程序組合器

我們可以定義自己的功能處理程序組合器,而不是神奇的 negroni 解。每個組合器處理一個特定的任務,並且可以組合起來形成執行鏈。例如,您可以建立一個用於回應日誌記錄的組合器:

<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // Replace response writer with a recorder for subsequent handlers
        c := httptest.NewRecorder()
        next(c, r)

        // Copy response from recorder to actual response writer
        for k, v := range c.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(c.Code)
        c.Body.WriteTo(w)
    }
}</code>
登入後複製

管理中間件鏈

要將日誌記錄中間件套用於特定類別中的所有處理程序,我們可以建立一個預設處理程序:

<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}</code>
登入後複製

此組合器確保透過NewDefaultHandler 建立的所有鏈都將包含回應日誌記錄以及NewOtherStuffHandler 中定義的任何其他預設功能。

透過利用這些技術,您可以無縫記錄來自您的即時網路服務,為偵錯和分析提供寶貴的見解。

以上是如何使用中介軟體鏈在 Go 中記錄 HTTP 回應?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!