diff --git a/pkg/apiserver/handlers.go b/pkg/apiserver/handlers.go index e82e7836f69..316acd1cfd8 100644 --- a/pkg/apiserver/handlers.go +++ b/pkg/apiserver/handlers.go @@ -134,30 +134,33 @@ func tooManyRequests(req *http.Request, w http.ResponseWriter) { } // RecoverPanics wraps an http Handler to recover and log panics. -func RecoverPanics(handler http.Handler) http.Handler { +func RecoverPanics(handler http.Handler, resolver *RequestInfoResolver) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { defer runtime.HandleCrash(func(err interface{}) { http.Error(w, "This request caused apisever to panic. Look in log for details.", http.StatusInternalServerError) glog.Errorf("APIServer panic'd on %v %v: %v\n%s\n", req.Method, req.RequestURI, err, debug.Stack()) }) - defer httplog.NewLogged(req, &w).StacktraceWhen( - httplog.StatusIsNot( - http.StatusOK, - http.StatusCreated, - http.StatusAccepted, - http.StatusBadRequest, - http.StatusMovedPermanently, - http.StatusTemporaryRedirect, - http.StatusConflict, - http.StatusNotFound, - http.StatusUnauthorized, - http.StatusForbidden, - http.StatusNotModified, - errors.StatusUnprocessableEntity, - http.StatusSwitchingProtocols, - ), - ).Log() + requestInfo, err := resolver.GetRequestInfo(req) + if err != nil || requestInfo.Verb != "proxy" { + defer httplog.NewLogged(req, &w).StacktraceWhen( + httplog.StatusIsNot( + http.StatusOK, + http.StatusCreated, + http.StatusAccepted, + http.StatusBadRequest, + http.StatusMovedPermanently, + http.StatusTemporaryRedirect, + http.StatusConflict, + http.StatusNotFound, + http.StatusUnauthorized, + http.StatusForbidden, + http.StatusNotModified, + errors.StatusUnprocessableEntity, + http.StatusSwitchingProtocols, + ), + ).Log() + } // Dispatch to the internal handler handler.ServeHTTP(w, req) }) diff --git a/pkg/genericapiserver/genericapiserver.go b/pkg/genericapiserver/genericapiserver.go index 5ec7a55ec21..bb111d538e2 100644 --- a/pkg/genericapiserver/genericapiserver.go +++ b/pkg/genericapiserver/genericapiserver.go @@ -288,7 +288,7 @@ func (s *GenericAPIServer) Run(options *options.ServerRunOptions) { secureStartedCh := make(chan struct{}) if secureLocation != "" { - handler := apiserver.TimeoutHandler(apiserver.RecoverPanics(s.Handler), longRunningTimeout) + handler := apiserver.TimeoutHandler(apiserver.RecoverPanics(s.Handler, s.NewRequestInfoResolver()), longRunningTimeout) secureServer := &http.Server{ Addr: secureLocation, Handler: apiserver.MaxInFlightLimit(sem, longRunningRequestCheck, handler), @@ -358,7 +358,7 @@ func (s *GenericAPIServer) Run(options *options.ServerRunOptions) { close(secureStartedCh) } - handler := apiserver.TimeoutHandler(apiserver.RecoverPanics(s.InsecureHandler), longRunningTimeout) + handler := apiserver.TimeoutHandler(apiserver.RecoverPanics(s.InsecureHandler, s.NewRequestInfoResolver()), longRunningTimeout) http := &http.Server{ Addr: insecureLocation, Handler: handler,