X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/63b1a5c12557bb11505f9dcfcc955f328b51e118..0945afa5523fb45f827750e4d1700df4ff222295:/sdk/go/httpserver/logger.go diff --git a/sdk/go/httpserver/logger.go b/sdk/go/httpserver/logger.go index 8886f9517d..5336488df0 100644 --- a/sdk/go/httpserver/logger.go +++ b/sdk/go/httpserver/logger.go @@ -53,10 +53,21 @@ func LogRequests(h http.Handler) http.Handler { logRequest(w, req, lgr) defer logResponse(w, req, lgr) - h.ServeHTTP(w, req) + h.ServeHTTP(rewrapResponseWriter(w, wrapped), req) }) } +// Rewrap w to restore additional interfaces provided by wrapped. +func rewrapResponseWriter(w http.ResponseWriter, wrapped http.ResponseWriter) http.ResponseWriter { + if hijacker, ok := wrapped.(http.Hijacker); ok { + return struct { + http.ResponseWriter + http.Hijacker + }{w, hijacker} + } + return w +} + func Logger(req *http.Request) logrus.FieldLogger { return ctxlog.FromContext(req.Context()) }