ホームページ >バックエンド開発 >Golang >Gorilla Mux とハンドラーを使用して Go Web アプリケーションで HTTP 応答をログに記録するにはどうすればよいですか?

Gorilla Mux とハンドラーを使用して Go Web アプリケーションで HTTP 応答をログに記録するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-07 22:56:12738ブラウズ

How Can I Log HTTP Responses in a Go Web Application Using Gorilla Mux and Handlers?

Go と Gorilla の Mux およびハンドラー パッケージを使用した HTTP 応答のログ記録

Go アプリケーションで、Gorilla の Mux およびハンドラー パッケージを利用して Web を構築するアプリケーションが HTTP 応答をログに記録しようとすると、問題が発生します。リクエストのログ記録は、Gorilla の LoggingHandler を使用して簡単に実現できますが、応答のログ記録には別のアプローチが必要です。

考えられる解決策の 1 つは、元のハンドラーをラップするカスタム ミドルウェア関数を作成することです。このミドルウェアはリクエストとレスポンスの両方を傍受でき、次のコードに示すように両方のログを記録できます:

func logResponse(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Capture the request
        requestBytes, err := httputil.DumpRequest(r, true)
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        log.Printf("%q", requestBytes)

        // Create a new ResponseRecorder to capture the response
        rec := httptest.NewRecorder()
        next.ServeHTTP(rec, r)

        // Capture the response
        responseBytes := rec.Body.Bytes()
        log.Printf("%q", responseBytes)

        // Copy the recorder's headers and body into the original ResponseWriter
        for k, v := range rec.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(rec.Code)
        w.Write(responseBytes)
    })
}

このミドルウェアは、ゴリラのルーターで元のハンドラーをラップすることで利用できます:

// Import Gorilla packages
import (
    "github.com/gorilla/mux"
    "github.com/gorilla/handlers"
)

func main() {
    // Setup Gorilla router
    r := mux.NewRouter()

    // Wrap the handler with the logging middleware
    wrappedHandler := handlers.LoggingHandler(os.Stdout, http.HandlerFunc(handler))

    // Register the handler with the router
    r.Handle("/api/v1/users", wrappedHandler)

    // Start the server
    http.ListenAndServe(":8080", r)
}

このカスタム ミドルウェアを使用すると、HTTP リクエストとレスポンスの両方を簡単にログに記録できるため、アプリケーションの可観測性が向上し、デバッグが容易になります。パフォーマンス監視

以上がGorilla Mux とハンドラーを使用して Go Web アプリケーションで HTTP 応答をログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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