Melog Respons HTTP dengan Go dan Gorilla
Apabila membina aplikasi web yang kompleks dengan Go dan kit web Gorilla, log permintaan dan respons HTTP adalah penting untuk penyahpepijatan dan analisis. Walaupun permintaan pengelogan adalah mudah menggunakan LoggingHandler Gorilla, respons pengelogan menimbulkan cabaran.
Respons Pengelogan
Penyelesaian yang disediakan oleh Eric Broda secara berkesan mencatatkan respons, tetapi ia tidak menghantar jawapan kepada pelanggan. Berikut ialah versi yang diubah suai yang mengekalkan kefungsian kod asal sambil memastikan respons sampai 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)) // 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) } }
Untuk menggunakan fungsi ini, hanya bungkus fungsi pengendali anda dengan logHandler:
http.HandleFunc("/", logHandler(myHandler))
Pengubahsuaian ini memastikan kedua-dua permintaan dan respons dilog semasa masih menyampaikan respons dengan betul kepada pelanggan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Log Berkesan Kedua-dua Permintaan HTTP dan Respons dalam Go dengan Gorilla Mux?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!