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
Barbara Streisandasal
2024-12-05 21:57:12764semak imbas

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

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!

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