X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b6d7efab2c4bffa3fabd55b166e44cca8ac1391f..97e8290d683afff06fe2e9a4cec522a871a96df3:/sdk/go/httpserver/logger.go diff --git a/sdk/go/httpserver/logger.go b/sdk/go/httpserver/logger.go index 8886f9517d..59981e3e55 100644 --- a/sdk/go/httpserver/logger.go +++ b/sdk/go/httpserver/logger.go @@ -53,10 +53,22 @@ 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} + } else { + return w + } +} + func Logger(req *http.Request) logrus.FieldLogger { return ctxlog.FromContext(req.Context()) }