diff --git a/server.go b/server.go index 4dc4530..4d83052 100644 --- a/server.go +++ b/server.go @@ -536,3 +536,51 @@ func MakeRPCError() *RpcReturnError { h: nil, } } + +type indirectBody struct { + inner io.ReadCloser + dump []byte + closer func() +} + +func (ib *indirectBody) Read(p []byte) (n int, err error) { + n, err = ib.inner.Read(p) + if n > 0 { + ib.dump = append(ib.dump, p...) + } + return +} + +func (ib *indirectBody) Close() error { + if ib.closer != nil { + ib.closer() + ib.closer = nil + } + return ib.inner.Close() +} + +func MakeHttpRequestForLogging(r *http.Request) *http.Request { + ib := &indirectBody{ + inner: r.Body, + } + + closer := func() { + var uv url.Values + + if r.Form != nil { + uv = r.Form + } else { + uv = r.URL.Query() + } + + logger.Println("request :") + logger.Println(" header :", r.Header) + logger.Println(" values :", uv) + logger.Println(" body :", string(ib.dump)) + } + + ib.closer = closer + + r.Body = ib + return r +}