aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go
diff options
context:
space:
mode:
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.go106
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.
50var LogHTTPRequestHandler = request.NamedHandler{
51 Name: "awssdk.client.LogRequest",
52 Fn: logRequest,
53}
54
47func logRequest(r *request.Request) { 55func 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.
83var LogHTTPRequestHeaderHandler = request.NamedHandler{
84 Name: "awssdk.client.LogRequestHeader",
85 Fn: logRequestHeader,
86}
87
88func 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
65const logRespMsg = `DEBUG: Response %s/%s Details: 100const 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.
113var LogHTTPResponseHandler = request.NamedHandler{
114 Name: "awssdk.client.LogResponse",
115 Fn: logResponse,
116}
117
75func logResponse(r *request.Request) { 118func 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.
165var LogHTTPResponseHeaderHandler = request.NamedHandler{
166 Name: "awssdk.client.LogResponseHeader",
167 Fn: logResponseHeader,
168}
169
170func 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}