Created
January 8, 2017 07:57
-
-
Save briangershon/fa9feb08e6a65d52bdc35c738d8cf104 to your computer and use it in GitHub Desktop.
Log Request Body for Debugging (golang)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
buf, bodyErr := ioutil.ReadAll(r.Body) | |
if bodyErr != nil { | |
log.Print("bodyErr ", bodyErr.Error()) | |
http.Error(w, bodyErr.Error(), http.StatusInternalServerError) | |
return | |
} | |
rdr1 := ioutil.NopCloser(bytes.NewBuffer(buf)) | |
rdr2 := ioutil.NopCloser(bytes.NewBuffer(buf)) | |
log.Printf("BODY: %q", rdr1) | |
r.Body = rdr2 |
Thanks @nstansby -- you're right, a second NopCloser not needed since you can just log the message as you've demonstrated above, then create just the one NopCloser for r.Body
to continue on.
Mine was mainly a quick paste-in for debugging, so I didn't invest too much time in it.
Yours is nicer and could be used for debugging or production logging. Thanks again for adding your improvements!
It helps a lot, thanks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you, this pointed me in the right direction. But it seems this is dangerous code. From the docs for NewBuffer():
But this code is using
buf
twice. Moreover, while you need to construct aNopCloser
to make the stored content readable, is there really any reason to construct a second one just to log it?I got what I needed with the following code, which only creates one
NopCloser
and also doesn't violate the directive to not use the byte buffer after callingbytes.Newbuffer()
(this uses zerolog logging syntax but hopefully the difference is still clear):