Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Log Cekap Kedua-dua Permintaan HTTP dan Respons dalam Go?
Melog Permintaan dan Respons dalam Go
Apabila mencipta aplikasi yang kompleks dalam Go, pengendalian permintaan dan respons HTTP dengan cekap adalah penting. Walaupun pakej mux dan handler kit web Gorilla memudahkan pengendalian permintaan, respons pengelogan kekal sebagai cabaran.
Untuk menangani perkara ini, jawapan yang diterima oleh Eric Broda menawarkan penyelesaian yang menangkap butiran permintaan. Walau bagaimanapun, ia gagal untuk log respons sebenar yang dihantar kepada pelanggan. Untuk menyelesaikan masalah ini, 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) } }
Kod yang diubah suai ini memintas respons dan menyalinnya kepada penulis respons, membolehkan pengelogan kedua-dua permintaan dan respons.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Log Cekap Kedua-dua Permintaan HTTP dan Respons dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!