Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Log Respons HTTP dengan Berkesan dalam Go?

Bagaimanakah Saya Boleh Log Respons HTTP dengan Berkesan dalam Go?

Patricia Arquette
Lepaskan: 2024-11-28 11:08:11
asal
288 orang telah melayarinya

How Can I Effectively Log HTTP Responses in Go?

Melog Respons HTTP Menggunakan Go

Permintaan log masuk dalam Go adalah mudah dengan pakej seperti mux dan pengendali Gorilla. Walau bagaimanapun, respons pengelogan boleh menjadi lebih rumit. Artikel ini meneroka cara untuk mencapainya.

Menggunakan Pengendali Pengelogan Tersuai

Satu penyelesaian ialah mencipta pengendali pengelogan tersuai yang membungkus fungsi pengendali HTTP. Kod Eric Broda di bawah menyediakan rangka kerja awal:

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))
    }
}
Salin selepas log masuk

Mengubah suai Respons

Untuk menghantar respons kepada pelanggan, pengubahsuaian pada kod diperlukan:

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

        // this copies the recorded response to the response writer
        for k, v := range rec.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(rec.Code)
        rec.Body.WriteTo(w)
    }
}
Salin selepas log masuk

Kod yang diubah suai ini membungkus fungsi pengendali dan merekodkan kedua-dua permintaan dan badan tindak balas. Dengan meletakkan pengendali pengelogan ini dalam tindanan middleware, anda boleh log respons dengan mudah sepanjang aplikasi anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Log Respons HTTP dengan Berkesan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan