Antworttext in Gin-Middleware protokollieren
In Middleware müssen Sie möglicherweise den Antworttext zu Debug- oder Prüfzwecken erfassen und protokollieren. Wie können wir also über den Middleware-Kontext in Gin auf den Antworttext zugreifen?
Gin verwaltet das Schreiben der Antworten intern, was es schwierig macht, den Text direkt abzurufen. Um dies zu überwinden, müssen wir unseren eigenen Writer implementieren, der die Schreibvorgänge abfängt. Hier ist eine Schritt-für-Schritt-Anleitung:
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) }
Dieser Writer puffert den Antworttext beim Schreiben an den ursprünglichen Autor.
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()) } }
In der Middleware weisen wir unseren benutzerdefinierten Writer blw dem Kontext zu und stellen so sicher, dass alle Antworten von ihm erfasst werden. Dann protokollieren wir den Text, wenn der Statuscode ein Fehler ist.
router.Use(ginBodyLogMiddleware)
Jetzt, wenn Anfragen vorliegen Von Ihrem Gin-Router verarbeitet, fängt die Middleware die Antworttexte für Anfragen mit Fehlerstatuscodes ab und protokolliert sie.
Beachten Sie, dass dieser Ansatz Protokolliert keine Antworttexte für statische Dateien, sollte aber den Anwendungsfall für die meisten dynamischen Inhalte abdecken. Wenn Sie alle Dateien abfangen müssen, benötigen Sie einen komplexeren Wrapper um die Gin-Engine.
Das obige ist der detaillierte Inhalt vonWie erfasst und protokolliert man den Antworttext in Gin Middleware?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!