recover.go

 1package middleware
 2
 3import (
 4	"log/slog"
 5	"net/http"
 6
 7	"git.kilimanjaro.io/rtw/pkg/log"
 8)
 9
10// Recover from panics and log any available details
11func Recover(next http.Handler) http.Handler {
12	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
13		defer func() {
14			rv := recover()
15			if rv != nil {
16				log := log.FromContext(r.Context())
17				log.Error("unexpected panic", slog.Any("details", rv))
18			}
19		}()
20
21		next.ServeHTTP(w, r)
22	})
23}