ホームページ  >  記事  >  バックエンド開発  >  Jin ミドルウェアで応答本文をキャプチャしてログに記録する方法は?

Jin ミドルウェアで応答本文をキャプチャしてログに記録する方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-12 01:44:01227ブラウズ

How to Capture and Log Response Body in Gin Middleware?

Gin ミドルウェアの応答本文のログ記録

ミドルウェアでは、デバッグまたは監査の目的で応答本文をキャプチャしてログに記録する必要がある場合があります。では、Gin のミドルウェア コンテキストから応答本文にアクセスするにはどうすればよいでしょうか?

Gin は応答の書き込みを内部で管理するため、本文を直接取得するのは困難です。これを克服するには、書き込み操作をインターセプトする独自の Writer を実装する必要があります。段階的なアプローチは次のとおりです:

  1. カスタム ライターを作成します:
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)
}

このライターは、応答本文の書き込みと同時にバッファリングします。

  1. を実装するミドルウェア:
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 をコンテキストに割り当て、すべての応答がコンテキストによって確実にキャプチャされるようにします。次に、ステータス コードがエラーの場合は本文をログに記録します。

  1. ミドルウェアを使用します:
router.Use(ginBodyLogMiddleware)

ここで、リクエストがJin ルーターによって処理されると、ミドルウェアはエラー ステータス コードを含むリクエストの応答本文をインターセプトしてログに記録します。

これに注意してください。このアプローチでは、静的ファイルの応答本文はログに記録されませんが、ほとんどの動的コンテンツのユースケースに対処する必要があります。すべてのファイルをインターセプトする必要がある場合は、Gin エンジンのより複雑なラッパーが必要になります。

以上がJin ミドルウェアで応答本文をキャプチャしてログに記録する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。