Gin ミドルウェアの応答本文のログ記録
ミドルウェアでは、デバッグまたは監査の目的で応答本文をキャプチャしてログに記録する必要がある場合があります。では、Gin のミドルウェア コンテキストから応答本文にアクセスするにはどうすればよいでしょうか?
Gin は応答の書き込みを内部で管理するため、本文を直接取得するのは困難です。これを克服するには、書き込み操作をインターセプトする独自の Writer を実装する必要があります。段階的なアプローチは次のとおりです:
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) }
このライターは、応答本文の書き込みと同時にバッファリングします。
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()) } }
ミドルウェアでは、カスタム ライター blw をコンテキストに割り当て、すべての応答がコンテキストによって確実にキャプチャされるようにします。次に、ステータス コードがエラーの場合は本文をログに記録します。
router.Use(ginBodyLogMiddleware)
ここで、リクエストがJin ルーターによって処理されると、ミドルウェアはエラー ステータス コードを含むリクエストの応答本文をインターセプトしてログに記録します。
これに注意してください。このアプローチでは、静的ファイルの応答本文はログに記録されませんが、ほとんどの動的コンテンツのユースケースに対処する必要があります。すべてのファイルをインターセプトする必要がある場合は、Gin エンジンのより複雑なラッパーが必要になります。
以上がJin ミドルウェアで応答本文をキャプチャしてログに記録する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。