@@ -8,12 +8,10 @@ import (
88 "math"
99 "net"
1010 "net/http"
11- "net/http/httputil"
1211 "reflect"
1312 "strconv"
1413 "strings"
1514 "sync"
16- "sync/atomic"
1715 "time"
1816
1917 "github.com/scaleway/scaleway-sdk-go/internal/auth"
@@ -73,6 +71,11 @@ func NewClient(opts ...ClientOption) (*Client, error) {
7371 setInsecureMode (s .httpClient )
7472 }
7573
74+ if logger .ShouldLog (logger .LogLevelDebug ) {
75+ logger .Debugf ("client: using request logger" )
76+ setRequestLogging (s .httpClient )
77+ }
78+
7679 logger .Debugf ("client: using sdk version " + version )
7780
7881 return & Client {
@@ -182,13 +185,8 @@ func (c *Client) Do(req *ScalewayRequest, res interface{}, opts ...RequestOption
182185 return c .do (req , res )
183186}
184187
185- // requestNumber auto increments on each do().
186- // This allows easy distinguishing of concurrently performed requests in log.
187- var requestNumber uint32
188-
189188// do performs a single HTTP request based on the ScalewayRequest object.
190189func (c * Client ) do (req * ScalewayRequest , res interface {}) (sdkErr error ) {
191- currentRequestNumber := atomic .AddUint32 (& requestNumber , 1 )
192190
193191 if req == nil {
194192 return errors .New ("request must be non-nil" )
@@ -213,29 +211,6 @@ func (c *Client) do(req *ScalewayRequest, res interface{}) (sdkErr error) {
213211 httpRequest = httpRequest .WithContext (req .ctx )
214212 }
215213
216- if logger .ShouldLog (logger .LogLevelDebug ) {
217- // Keep original headers (before anonymization)
218- originalHeaders := httpRequest .Header
219-
220- // Get anonymized headers
221- httpRequest .Header = req .getAllHeaders (req .auth , c .userAgent , true )
222-
223- dump , err := httputil .DumpRequestOut (httpRequest , true )
224- if err != nil {
225- logger .Warningf ("cannot dump outgoing request: %s" , err )
226- } else {
227- var logString string
228- logString += "\n --------------- Scaleway SDK REQUEST %d : ---------------\n "
229- logString += "%s\n "
230- logString += "---------------------------------------------------------"
231-
232- logger .Debugf (logString , currentRequestNumber , dump )
233- }
234-
235- // Restore original headers before sending the request
236- httpRequest .Header = originalHeaders
237- }
238-
239214 // execute request
240215 httpResponse , err := c .httpClient .Do (httpRequest )
241216 if err != nil {
@@ -248,19 +223,6 @@ func (c *Client) do(req *ScalewayRequest, res interface{}) (sdkErr error) {
248223 sdkErr = errors .Wrap (closeErr , "could not close http response" )
249224 }
250225 }()
251- if logger .ShouldLog (logger .LogLevelDebug ) {
252- dump , err := httputil .DumpResponse (httpResponse , true )
253- if err != nil {
254- logger .Warningf ("cannot dump ingoing response: %s" , err )
255- } else {
256- var logString string
257- logString += "\n --------------- Scaleway SDK RESPONSE %d : ---------------\n "
258- logString += "%s\n "
259- logString += "----------------------------------------------------------"
260-
261- logger .Debugf (logString , currentRequestNumber , dump )
262- }
263- }
264226
265227 sdkErr = hasResponseError (httpResponse )
266228 if sdkErr != nil {
@@ -561,3 +523,12 @@ func setInsecureMode(c httpClient) {
561523 }
562524 transportClient .TLSClientConfig .InsecureSkipVerify = true
563525}
526+
527+ func setRequestLogging (c httpClient ) {
528+ standardHTTPClient , ok := c .(* http.Client )
529+ if ! ok {
530+ logger .Warningf ("client: cannot use request logger with HTTP client of type %T" , c )
531+ return
532+ }
533+ standardHTTPClient .Transport = & requestLoggerTransport {rt : standardHTTPClient .Transport }
534+ }
0 commit comments