ホームページ >バックエンド開発 >Golang >Go で HTTP リクエストとレスポンスの両方を効果的に記録するにはどうすればよいですか?

Go で HTTP リクエストとレスポンスの両方を効果的に記録するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-05 21:57:12766ブラウズ

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

HTTP レスポンスのログ記録の機能強化

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))

        // Forward the response to the client
        for k, v := range rec.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(rec.Code)
        rec.Body.WriteTo(w)
    }
}

この変更された関数は次のことを実現します:

  • リクエストをログに記録します。前と同様です。
  • 応答をキャプチャする httptest.NewRecorder を作成します。
  • 元のハンドラー関数を呼び出し、応答をレコーダーに書き込みます。
  • からの応答をログに記録します。
  • レコーダーのヘッダーとステータス コードを実際の応答にコピーしますWriter.
  • レコーダーの本体をクライアントに転送します。

この変更された関数をアプリケーションに統合することで、リクエストとレスポンスの両方をシームレスにログに記録し、HTTP の包括的なビューを提供できます。コミュニケーション。

以上がGo で HTTP リクエストとレスポンスの両方を効果的に記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。