From a0d36cf87a91171b70c04f0e2f86ea12a0281914 Mon Sep 17 00:00:00 2001 From: andres-portainer <91705312+andres-portainer@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:58:20 -0300 Subject: [PATCH] fix(server): add panic logging middleware BE-11750 (#599) --- api/http/middlewares/panic_logger.go | 25 +++++++++++++++++++++++++ api/http/server.go | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 api/http/middlewares/panic_logger.go diff --git a/api/http/middlewares/panic_logger.go b/api/http/middlewares/panic_logger.go new file mode 100644 index 000000000..6f3b2076f --- /dev/null +++ b/api/http/middlewares/panic_logger.go @@ -0,0 +1,25 @@ +package middlewares + +import ( + "net/http" + "runtime/debug" + + "github.com/rs/zerolog/log" +) + +func WithPanicLogger(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + defer func() { + if err := recover(); err != nil { + log.Error(). + Any("panic", err). + Str("method", req.Method). + Str("url", req.URL.String()). + Str("stack", string(debug.Stack())). + Msg("Panic in request handler") + } + }() + + next.ServeHTTP(w, req) + }) +} diff --git a/api/http/server.go b/api/http/server.go index 3dcc84d2d..12925d479 100644 --- a/api/http/server.go +++ b/api/http/server.go @@ -335,7 +335,7 @@ func (server *Server) Start() error { handler := adminMonitor.WithRedirect(offlineGate.WaitingMiddleware(time.Minute, server.Handler)) - handler = middlewares.WithSlowRequestsLogger(handler) + handler = middlewares.WithPanicLogger(middlewares.WithSlowRequestsLogger(handler)) handler, err := csrf.WithProtect(handler) if err != nil {