1
0

recover.go 619 B

123456789101112131415161718192021222324252627282930313233
  1. package rescue
  2. import (
  3. "context"
  4. "runtime/debug"
  5. "github.com/wuntsong-org/go-zero-plus/core/logx"
  6. )
  7. // Recover is used with defer to do cleanup on panics.
  8. // Use it like:
  9. //
  10. // defer Recover(func() {})
  11. func Recover(cleanups ...func()) {
  12. for _, cleanup := range cleanups {
  13. cleanup()
  14. }
  15. if p := recover(); p != nil {
  16. logx.ErrorStack(p)
  17. }
  18. }
  19. // RecoverCtx is used with defer to do cleanup on panics.
  20. func RecoverCtx(ctx context.Context, cleanups ...func()) {
  21. for _, cleanup := range cleanups {
  22. cleanup()
  23. }
  24. if p := recover(); p != nil {
  25. logx.WithContext(ctx).Errorf("%+v\n%s", p, debug.Stack())
  26. }
  27. }