diff options
Diffstat (limited to 'vendor/github.com/aws/aws-sdk-go/aws/client/logger.go')
-rw-r--r-- | vendor/github.com/aws/aws-sdk-go/aws/client/logger.go | 106 |
1 files changed, 91 insertions, 15 deletions
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go b/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go index 1f39c91..ce9fb89 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go | |||
@@ -44,22 +44,57 @@ func (reader *teeReaderCloser) Close() error { | |||
44 | return reader.Source.Close() | 44 | return reader.Source.Close() |
45 | } | 45 | } |
46 | 46 | ||
47 | // LogHTTPRequestHandler is a SDK request handler to log the HTTP request sent | ||
48 | // to a service. Will include the HTTP request body if the LogLevel of the | ||
49 | // request matches LogDebugWithHTTPBody. | ||
50 | var LogHTTPRequestHandler = request.NamedHandler{ | ||
51 | Name: "awssdk.client.LogRequest", | ||
52 | Fn: logRequest, | ||
53 | } | ||
54 | |||
47 | func logRequest(r *request.Request) { | 55 | func logRequest(r *request.Request) { |
48 | logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) | 56 | logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) |
49 | dumpedBody, err := httputil.DumpRequestOut(r.HTTPRequest, logBody) | 57 | bodySeekable := aws.IsReaderSeekable(r.Body) |
58 | |||
59 | b, err := httputil.DumpRequestOut(r.HTTPRequest, logBody) | ||
50 | if err != nil { | 60 | if err != nil { |
51 | r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, r.ClientInfo.ServiceName, r.Operation.Name, err)) | 61 | r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, |
62 | r.ClientInfo.ServiceName, r.Operation.Name, err)) | ||
52 | return | 63 | return |
53 | } | 64 | } |
54 | 65 | ||
55 | if logBody { | 66 | if logBody { |
67 | if !bodySeekable { | ||
68 | r.SetReaderBody(aws.ReadSeekCloser(r.HTTPRequest.Body)) | ||
69 | } | ||
56 | // Reset the request body because dumpRequest will re-wrap the r.HTTPRequest's | 70 | // Reset the request body because dumpRequest will re-wrap the r.HTTPRequest's |
57 | // Body as a NoOpCloser and will not be reset after read by the HTTP | 71 | // Body as a NoOpCloser and will not be reset after read by the HTTP |
58 | // client reader. | 72 | // client reader. |
59 | r.ResetBody() | 73 | r.ResetBody() |
60 | } | 74 | } |
61 | 75 | ||
62 | r.Config.Logger.Log(fmt.Sprintf(logReqMsg, r.ClientInfo.ServiceName, r.Operation.Name, string(dumpedBody))) | 76 | r.Config.Logger.Log(fmt.Sprintf(logReqMsg, |
77 | r.ClientInfo.ServiceName, r.Operation.Name, string(b))) | ||
78 | } | ||
79 | |||
80 | // LogHTTPRequestHeaderHandler is a SDK request handler to log the HTTP request sent | ||
81 | // to a service. Will only log the HTTP request's headers. The request payload | ||
82 | // will not be read. | ||
83 | var LogHTTPRequestHeaderHandler = request.NamedHandler{ | ||
84 | Name: "awssdk.client.LogRequestHeader", | ||
85 | Fn: logRequestHeader, | ||
86 | } | ||
87 | |||
88 | func logRequestHeader(r *request.Request) { | ||
89 | b, err := httputil.DumpRequestOut(r.HTTPRequest, false) | ||
90 | if err != nil { | ||
91 | r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, | ||
92 | r.ClientInfo.ServiceName, r.Operation.Name, err)) | ||
93 | return | ||
94 | } | ||
95 | |||
96 | r.Config.Logger.Log(fmt.Sprintf(logReqMsg, | ||
97 | r.ClientInfo.ServiceName, r.Operation.Name, string(b))) | ||
63 | } | 98 | } |
64 | 99 | ||
65 | const logRespMsg = `DEBUG: Response %s/%s Details: | 100 | const logRespMsg = `DEBUG: Response %s/%s Details: |
@@ -72,27 +107,44 @@ const logRespErrMsg = `DEBUG ERROR: Response %s/%s: | |||
72 | %s | 107 | %s |
73 | -----------------------------------------------------` | 108 | -----------------------------------------------------` |
74 | 109 | ||
110 | // LogHTTPResponseHandler is a SDK request handler to log the HTTP response | ||
111 | // received from a service. Will include the HTTP response body if the LogLevel | ||
112 | // of the request matches LogDebugWithHTTPBody. | ||
113 | var LogHTTPResponseHandler = request.NamedHandler{ | ||
114 | Name: "awssdk.client.LogResponse", | ||
115 | Fn: logResponse, | ||
116 | } | ||
117 | |||
75 | func logResponse(r *request.Request) { | 118 | func logResponse(r *request.Request) { |
76 | lw := &logWriter{r.Config.Logger, bytes.NewBuffer(nil)} | 119 | lw := &logWriter{r.Config.Logger, bytes.NewBuffer(nil)} |
77 | r.HTTPResponse.Body = &teeReaderCloser{ | 120 | |
78 | Reader: io.TeeReader(r.HTTPResponse.Body, lw), | 121 | logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) |
79 | Source: r.HTTPResponse.Body, | 122 | if logBody { |
123 | r.HTTPResponse.Body = &teeReaderCloser{ | ||
124 | Reader: io.TeeReader(r.HTTPResponse.Body, lw), | ||
125 | Source: r.HTTPResponse.Body, | ||
126 | } | ||
80 | } | 127 | } |
81 | 128 | ||
82 | handlerFn := func(req *request.Request) { | 129 | handlerFn := func(req *request.Request) { |
83 | body, err := httputil.DumpResponse(req.HTTPResponse, false) | 130 | b, err := httputil.DumpResponse(req.HTTPResponse, false) |
84 | if err != nil { | 131 | if err != nil { |
85 | lw.Logger.Log(fmt.Sprintf(logRespErrMsg, req.ClientInfo.ServiceName, req.Operation.Name, err)) | 132 | lw.Logger.Log(fmt.Sprintf(logRespErrMsg, |
133 | req.ClientInfo.ServiceName, req.Operation.Name, err)) | ||
86 | return | 134 | return |
87 | } | 135 | } |
88 | 136 | ||
89 | b, err := ioutil.ReadAll(lw.buf) | 137 | lw.Logger.Log(fmt.Sprintf(logRespMsg, |
90 | if err != nil { | 138 | req.ClientInfo.ServiceName, req.Operation.Name, string(b))) |
91 | lw.Logger.Log(fmt.Sprintf(logRespErrMsg, req.ClientInfo.ServiceName, req.Operation.Name, err)) | 139 | |
92 | return | 140 | if logBody { |
93 | } | 141 | b, err := ioutil.ReadAll(lw.buf) |
94 | lw.Logger.Log(fmt.Sprintf(logRespMsg, req.ClientInfo.ServiceName, req.Operation.Name, string(body))) | 142 | if err != nil { |
95 | if req.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) { | 143 | lw.Logger.Log(fmt.Sprintf(logRespErrMsg, |
144 | req.ClientInfo.ServiceName, req.Operation.Name, err)) | ||
145 | return | ||
146 | } | ||
147 | |||
96 | lw.Logger.Log(string(b)) | 148 | lw.Logger.Log(string(b)) |
97 | } | 149 | } |
98 | } | 150 | } |
@@ -106,3 +158,27 @@ func logResponse(r *request.Request) { | |||
106 | Name: handlerName, Fn: handlerFn, | 158 | Name: handlerName, Fn: handlerFn, |
107 | }) | 159 | }) |
108 | } | 160 | } |
161 | |||
162 | // LogHTTPResponseHeaderHandler is a SDK request handler to log the HTTP | ||
163 | // response received from a service. Will only log the HTTP response's headers. | ||
164 | // The response payload will not be read. | ||
165 | var LogHTTPResponseHeaderHandler = request.NamedHandler{ | ||
166 | Name: "awssdk.client.LogResponseHeader", | ||
167 | Fn: logResponseHeader, | ||
168 | } | ||
169 | |||
170 | func logResponseHeader(r *request.Request) { | ||
171 | if r.Config.Logger == nil { | ||
172 | return | ||
173 | } | ||
174 | |||
175 | b, err := httputil.DumpResponse(r.HTTPResponse, false) | ||
176 | if err != nil { | ||
177 | r.Config.Logger.Log(fmt.Sprintf(logRespErrMsg, | ||
178 | r.ClientInfo.ServiceName, r.Operation.Name, err)) | ||
179 | return | ||
180 | } | ||
181 | |||
182 | r.Config.Logger.Log(fmt.Sprintf(logRespMsg, | ||
183 | r.ClientInfo.ServiceName, r.Operation.Name, string(b))) | ||
184 | } | ||