Files
warpbox-dev/backend/libs/middleware/recoverer.go

30 lines
669 B
Go
Raw Normal View History

package middleware
import (
"log/slog"
"net/http"
"runtime/debug"
)
func Recoverer(logger *slog.Logger) Middleware {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if recovered := recover(); recovered != nil {
logger.Error("panic recovered",
"source", "panic",
"severity", "error",
"code", 5001,
"error", recovered,
"stack", string(debug.Stack()),
"request_id", RequestIDFromContext(r.Context()),
)
http.Error(w, "internal server error", http.StatusInternalServerError)
}
}()
next.ServeHTTP(w, r)
})
}
}