X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2f66d4cc05e9442a9bb69969744d0750a02a1ed4..d2d20f664ec207d1c9492edea6d893b1e333b055:/sdk/go/httpserver/logger.go?ds=sidebyside diff --git a/sdk/go/httpserver/logger.go b/sdk/go/httpserver/logger.go index 8886f9517d..78a1f77adb 100644 --- a/sdk/go/httpserver/logger.go +++ b/sdk/go/httpserver/logger.go @@ -1,6 +1,6 @@ // Copyright (C) The Arvados Authors. All rights reserved. // -// SPDX-License-Identifier: AGPL-3.0 +// SPDX-License-Identifier: Apache-2.0 package httpserver @@ -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()) }