Heim >Backend-Entwicklung >Golang >Wie protokolliere ich den Antworttext in Gin Middleware?

Wie protokolliere ich den Antworttext in Gin Middleware?

Susan Sarandon
Susan SarandonOriginal
2024-11-09 09:14:02209Durchsuche

How to Log Response Body in Gin Middleware?

Antworttext in Gin-Middleware protokollieren

In Gin erfordert die Protokollierung des Antworttexts in einer Middleware das Abfangen und Speichern der Antwort, bevor sie geschrieben wird . So erreichen Sie dies:

Erstellen Sie einen benutzerdefinierten Writer, der Write()-Aufrufe abfängt und den Text speichert:

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)

Implementieren Sie eine Middleware-Funktion, die den benutzerdefinierten Writer verwendet, um die Antwort abzufangen:

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

Registrieren Sie die Middleware in Ihrem Gin-Router:

router.Use(gin_body_log_middleware)

Diese Middleware fängt alle Antworten ab und protokolliert den Text für Anfragen mit einem Statuscode von 400 oder höher. Für statische Dateianforderungen ist ein ausgefeilterer Wrapper erforderlich, der die Gin-Engine umhüllt.

Das obige ist der detaillierte Inhalt vonWie protokolliere ich den Antworttext in Gin Middleware?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn