Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Log Berkesan Kedua-dua Permintaan HTTP dan Respons dalam Go?

Bagaimanakah Saya Boleh Log Berkesan Kedua-dua Permintaan HTTP dan Respons dalam Go?

Barbara Streisand
Lepaskan: 2024-12-05 21:57:12
asal
766 orang telah melayarinya

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

Peningkatan Respons HTTP Log

Melog permintaan HTTP ialah aspek penting dalam penyahpepijatan dan pemantauan prestasi. Walaupun terdapat penyelesaian seperti Gorilla's LoggingHandler untuk permintaan pengelogan, respons pengelogan selalunya merupakan tugas yang diabaikan.

Untuk menangani perkara ini, mari kita terokai versi diubah suai bagi jawapan Eric Broda yang diterima yang kedua-duanya mencatatkan respons dan memajukannya kepada pelanggan:

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

Fungsi diubah suai ini mencapai berikut:

  • Melog permintaan seperti sebelum ini.
  • Mencipta httptest.NewRecorder untuk menangkap respons.
  • Panggil fungsi pengendali asal, yang menulis respons kepada perakam.
  • Merakam respons daripada perakam.
  • Menyalin pengepala perakam dan kod status kepada penulis respons sebenar.
  • Majukan badan perakam kepada klien.

Dengan menyepadukan fungsi yang diubah suai ini ke dalam aplikasi anda, anda boleh log lancar kedua-dua permintaan dan respons, memberikan pandangan menyeluruh tentang komunikasi HTTP anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Log Berkesan Kedua-dua Permintaan HTTP dan Respons 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