Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Log Respons HTTP dalam Aplikasi Go Web Menggunakan Gorilla Mux dan Pengendali?

Bagaimanakah Saya Boleh Log Respons HTTP dalam Aplikasi Go Web Menggunakan Gorilla Mux dan Pengendali?

Patricia Arquette
Patricia Arquetteasal
2024-12-07 22:56:12737semak imbas

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

Melog Respons HTTP dengan Pakej Go and Gorilla's Mux and Handler

Dalam aplikasi Go, menggunakan pakej mux dan handler Gorilla untuk membina web aplikasi memberikan cabaran apabila cuba log respons HTTP. Walaupun permintaan pengelogan mudah dicapai dengan LoggingHandler Gorilla, respons pengelogan memerlukan pendekatan yang berbeza.

Satu penyelesaian yang berpotensi ialah mencipta fungsi perisian tengah tersuai yang membungkus pengendali asal. Perisian tengah ini boleh memintas kedua-dua permintaan dan respons, membenarkan pengelogan kedua-duanya seperti yang ditunjukkan dalam kod berikut:

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

Perisian tengah ini kemudiannya boleh digunakan dengan membungkus pengendali asal dalam penghala Gorilla:

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

Dengan menggunakan perisian tengah tersuai ini, kedua-dua permintaan dan respons HTTP boleh dilog dengan mudah, meningkatkan kebolehmerhatian aplikasi dan membantu dalam penyahpepijatan dan pemantauan prestasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Log Respons HTTP dalam Aplikasi Go Web Menggunakan Gorilla Mux dan Pengendali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn