Sie können nicht, weil die Antwort technisch nicht existiert, bis Sie es in die ResponseWriter
schreiben.
Aber im response
ist nur die header
, body
und response code
so in der Handler-Funktion Sie Methode Header()
auf den ResponseWriter
können den Header bekommen und dann können Sie die response code
und die body
anmelden, bevor Sie es an die ResponseWriter
schreiben .
Wenn Sie ein Beispiel dafür angeben, was Sie zu tun versuchen, kann ich näher erläutern, wie Sie es tun können.
Dies ist, was ich dies für ein kleines Projekt zu beheben tat: Ich benutze dies in allen meinen Handler:
type transaction struct {
res Response // Create this type also
req Request // Create this type also
}
func NewTransaction(w http.ResponseWriter, req *http.Request) *transaction{}
Log := make(chan transaction, 100)
go func{
// Read from channel and log the info however you want.
}()
func indexHandler(w http.ResponseWriter, req *http.Request) {
tx := NewTransaction(w, req) // Struct with the request and response
defer func() {
Log <- tx
}()
/*
Handle request here
*/
// Update request and response
Request.Body = body
}
Und am Ende der Behandlungsfunktion, nachdem die angeforderten Daten gedient hat, ich Aktualisieren Sie die Werte für die Anfrage und die Antwort.
Und eine Goroutine hören auf den Kanal Log und machen Sie alle Ihre Protokollierung.
Sie können auch eine Wrapper-Funktion schreiben, die die Datei bereitstellt und die Antwort zurückgibt.
Müssen Sie die gesamte Antwort protokollieren? Sind nur die Header OK? – elithrar