|
- package middleware
-
- import (
- "log/slog"
- "net/http"
- "runtime/debug"
- )
-
- // Recovery recovers from panics, logs the stack, and returns 500.
- func Recovery(next http.Handler) http.Handler {
- return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- defer func() {
- if err := recover(); err != nil {
- slog.Error("panic recovered", "err", err, "stack", string(debug.Stack()))
- w.Header().Set("Content-Type", "application/json")
- w.WriteHeader(http.StatusInternalServerError)
- w.Write([]byte(`{"error":"internal_error","message":"internal server error"}`))
- }
- }()
- next.ServeHTTP(w, r)
- })
- }
|