ホームページ >バックエンド開発 >Golang >Jin ミドルウェアで応答本文をログに記録するにはどうすればよいですか?

Jin ミドルウェアで応答本文をログに記録するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-09 09:14:02173ブラウズ

How to Log Response Body in Gin Middleware?

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

Gin では、応答本文をミドルウェアに記録するには、応答が書き込まれる前に応答をインターセプトして保存する必要があります。 。これを実現する方法は次のとおりです。

Write() 呼び出しをインターセプトして本体を保存するカスタム ライターを作成します。

import bytes

class bodyLogWriter(gin.ResponseWriter):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.body = bytes.Buffer()

    def Write(self, data):
        self.body.write(data)
        return super().Write(data)

カスタム ライターを使用して応答をインターセプトするミドルウェア関数を実装します。

from functools import wraps

def gin_body_log_middleware(func):
    @wraps(func)
    def inner(context, *args, **kwargs):
        context.writer = bodyLogWriter(context.writer)
        wrapped_func(context, *args, **kwargs)
        
        status_code = context.writer.status_code
        if status_code >= 400:
            # Access the logged response body
            print("Response body:", context.writer.body.getvalue().decode())

    return inner

Gin にミドルウェアを登録するrouter:

router.Use(gin_body_log_middleware)

このミドルウェアはすべての応答をインターセプトし、ステータス コード 400 以上のリクエストの本文をログに記録します。静的ファイルリクエストの場合は、Gin エンジンをラップするより洗練されたラッパーが必要です。

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

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