Log Response Body dalam Gin Middleware
Dalam middleware, anda mungkin perlu menangkap dan log badan respons untuk tujuan penyahpepijatan atau pengauditan. Jadi, bagaimanakah kita boleh mengakses badan tindak balas daripada konteks perisian tengah dalam Gin?
Gin menguruskan penulisan respons secara dalaman, menjadikannya sukar untuk mendapatkan badan secara langsung. Untuk mengatasinya, kita perlu melaksanakan Penulis kita sendiri yang memintas operasi tulis. Berikut ialah pendekatan langkah demi langkah:
type bodyLogWriter struct { gin.ResponseWriter body *bytes.Buffer } func (w bodyLogWriter) Write(b []byte) (int, error) { w.body.Write(b) return w.ResponseWriter.Write(b) }
Penulis ini menampan badan respons di samping menulisnya kepada penulis asal.
func ginBodyLogMiddleware(c *gin.Context) { blw := &bodyLogWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer} c.Writer = blw c.Next() statusCode := c.Writer.Status() if statusCode >= 400 { fmt.Println("Response body: " + blw.body.String()) } }
Dalam middleware, kami menugaskan penulis tersuai kami blw kepada konteks, memastikan semua respons akan ditangkap olehnya. Kemudian, kami log kandungan jika kod status adalah ralat.
router.Use(ginBodyLogMiddleware)
Sekarang, apabila permintaan dibuat dikendalikan oleh penghala Gin anda, perisian tengah akan memintas dan mencatat badan tindak balas untuk permintaan dengan kod status ralat.
Perhatikan bahawa pendekatan ini tidak akan log badan tindak balas untuk fail statik, tetapi ia harus menangani kes penggunaan untuk kebanyakan kandungan dinamik. Jika anda perlu memintas semua fail, anda memerlukan pembalut yang lebih kompleks di sekeliling enjin Gin.
Atas ialah kandungan terperinci Bagaimana untuk Menangkap dan Merakam Badan Respons dalam Gin Middleware?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!