github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/azure/internal/tracing/tracing.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package tracing 5 6 import ( 7 "net/http" 8 "net/http/httputil" 9 10 "github.com/Azure/go-autorest/autorest" 11 "github.com/juju/loggo" 12 ) 13 14 // PrepareDecorator returns an autorest.PrepareDecorator that 15 // logs requests at trace level. 16 func PrepareDecorator(logger loggo.Logger) autorest.PrepareDecorator { 17 return func(p autorest.Preparer) autorest.Preparer { 18 return autorest.PreparerFunc(func(r *http.Request) (*http.Request, error) { 19 if logger.IsTraceEnabled() { 20 dump, err := httputil.DumpRequest(r, true) 21 if err != nil { 22 logger.Tracef("failed to dump request: %v", err) 23 logger.Tracef("%+v", r) 24 } else { 25 logger.Tracef("%s", dump) 26 } 27 } 28 return p.Prepare(r) 29 }) 30 } 31 } 32 33 // RespondDecorator returns an autorest.RespondDecorator that 34 // logs responses at trace level. 35 func RespondDecorator(logger loggo.Logger) autorest.RespondDecorator { 36 return func(r autorest.Responder) autorest.Responder { 37 return autorest.ResponderFunc(func(resp *http.Response) error { 38 if logger.IsTraceEnabled() { 39 dump, err := httputil.DumpResponse(resp, true) 40 if err != nil { 41 logger.Tracef("failed to dump response: %v", err) 42 logger.Tracef("%+v", resp) 43 } else { 44 logger.Tracef("%s", dump) 45 } 46 } 47 return r.Respond(resp) 48 }) 49 } 50 }