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}