server/pkg/rescue/recover.go
Chang lue Tsen 8addcc584b init: 1.0.0
2025-04-25 12:08:29 +09:00

35 lines
625 B
Go

package rescue
import (
"context"
"log"
"runtime/debug"
"github.com/perfect-panel/ppanel-server/pkg/logger"
)
// Recover is used with defer to do cleanup on panics.
// Use it like:
//
// defer Recover(func() {})
func Recover(cleanups ...func()) {
for _, cleanup := range cleanups {
cleanup()
}
if p := recover(); p != nil {
log.Print(p)
}
}
// RecoverCtx is used with defer to do cleanup on panics.
func RecoverCtx(ctx context.Context, cleanups ...func()) {
for _, cleanup := range cleanups {
cleanup()
}
if p := recover(); p != nil {
logger.WithContext(ctx).Errorf("%+v\n%s", p, debug.Stack())
}
}