ホームページ  >  記事  >  バックエンド開発  >  ミドルウェアチェーンを使用して Go で HTTP 応答をログに記録するにはどうすればよいですか?

ミドルウェアチェーンを使用して Go で HTTP 応答をログに記録するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-28 08:55:29127ブラウズ

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 で定義された他のデフォルト機能とともに応答ログが確実に含まれるようになります。

これらの手法を活用することで、HTTP 応答をシームレスにログに記録できます。ライブ Web サービスを利用して、デバッグと分析のための貴重な洞察を提供します。

以上がミドルウェアチェーンを使用して Go で HTTP 応答をログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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