You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wechatminiprogram/vendor/github.com/aws/smithy-go/transport/http/middleware_http_logging.go

76 lines
2.0 KiB

package http
import (
"context"
"fmt"
"net/http/httputil"
"github.com/aws/smithy-go/logging"
"github.com/aws/smithy-go/middleware"
)
// RequestResponseLogger is a deserialize middleware that will log the request and response HTTP messages and optionally
// their respective bodies. Will not perform any logging if none of the options are set.
type RequestResponseLogger struct {
LogRequest bool
LogRequestWithBody bool
LogResponse bool
LogResponseWithBody bool
}
// ID is the middleware identifier.
func (r *RequestResponseLogger) ID() string {
return "RequestResponseLogger"
}
// HandleDeserialize will log the request and response HTTP messages if configured accordingly.
func (r *RequestResponseLogger) HandleDeserialize(
ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler,
) (
out middleware.DeserializeOutput, metadata middleware.Metadata, err error,
) {
logger := middleware.GetLogger(ctx)
if r.LogRequest || r.LogRequestWithBody {
smithyRequest, ok := in.Request.(*Request)
if !ok {
return out, metadata, fmt.Errorf("unknown transport type %T", in)
}
rc := smithyRequest.Build(ctx)
reqBytes, err := httputil.DumpRequestOut(rc, r.LogRequestWithBody)
if err != nil {
return out, metadata, err
}
logger.Logf(logging.Debug, "Request\n%v", string(reqBytes))
if r.LogRequestWithBody {
smithyRequest, err = smithyRequest.SetStream(rc.Body)
if err != nil {
return out, metadata, err
}
in.Request = smithyRequest
}
}
out, metadata, err = next.HandleDeserialize(ctx, in)
if (err == nil) && (r.LogResponse || r.LogResponseWithBody) {
smithyResponse, ok := out.RawResponse.(*Response)
if !ok {
return out, metadata, fmt.Errorf("unknown transport type %T", out.RawResponse)
}
respBytes, err := httputil.DumpResponse(smithyResponse.Response, r.LogResponseWithBody)
if err != nil {
return out, metadata, fmt.Errorf("failed to dump response %w", err)
}
logger.Logf(logging.Debug, "Response\n%v", string(respBytes))
}
return out, metadata, err
}