Merge pull request #10601 from owncloud/proxy_context_canceled_log

feat: improve logs when a context is canceled in the proxy
This commit is contained in:
Michael Barz
2024-11-19 13:24:22 +01:00
committed by GitHub
3 changed files with 38 additions and 0 deletions

View File

@@ -343,6 +343,7 @@ func loadMiddlewares(logger log.Logger, cfg *config.Config,
chimiddleware.RealIP,
chimiddleware.RequestID,
middleware.AccessLog(logger),
middleware.ContextLogger(logger),
middleware.HTTPSRedirect,
middleware.Security(cspConfig),
router.Middleware(serviceSelector, cfg.PolicySelector, cfg.Policies, logger),

View File

@@ -0,0 +1,26 @@
package middleware
import (
"net/http"
"github.com/owncloud/ocis/v2/ocis-pkg/log"
)
// ContextLogger is a middleware to use a logger associated with the request's
// context which includes general information of the request.
func ContextLogger(logger log.Logger) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx := logger.With().
Str("remoteAddr", r.RemoteAddr).
Str(log.RequestIDString, r.Header.Get("X-Request-ID")).
Str("proto", r.Proto).
Str("method", r.Method).
Str("path", r.URL.Path).
Str("query", r.URL.RawQuery).
Str("fragment", r.URL.Fragment).
Logger().WithContext(r.Context())
next.ServeHTTP(w, r.WithContext(ctx))
})
}
}

View File

@@ -14,6 +14,7 @@ import (
"github.com/owncloud/ocis/v2/services/proxy/pkg/config"
"github.com/owncloud/ocis/v2/services/proxy/pkg/proxy/policy"
"github.com/owncloud/ocis/v2/services/proxy/pkg/router"
"github.com/rs/zerolog"
)
// MultiHostReverseProxy extends "httputil" to support multiple hosts with different policies
@@ -41,6 +42,16 @@ func NewMultiHostReverseProxy(opts ...Option) (*MultiHostReverseProxy, error) {
ri.Rewrite()(r)
}
rp.ErrorHandler = func(rw http.ResponseWriter, req *http.Request, err error) {
reqLogger := zerolog.Ctx(req.Context())
if ev := reqLogger.Error(); ev.Enabled() {
ev.Err(err).Msg("error happened in MultiHostReverseProxy")
} else {
rp.logger.Err(err).Msg("error happened in MultiHostReverseProxy")
}
rw.WriteHeader(http.StatusBadGateway)
}
tlsConf := &tls.Config{
MinVersion: tls.VersionTLS12,
InsecureSkipVerify: options.Config.InsecureBackends, //nolint:gosec