go-zero/core/rescue/recover.go

34 lines
611 B
Go
Raw Normal View History

2020-07-26 17:09:05 +08:00
package rescue
import (
"context"
"runtime/debug"
"github.com/zeromicro/go-zero/core/logx"
)
2020-07-26 17:09:05 +08:00
// Recover is used with defer to do cleanup on panics.
// Use it like:
//
// defer Recover(func() {})
2020-07-26 17:09:05 +08:00
func Recover(cleanups ...func()) {
for _, cleanup := range cleanups {
cleanup()
}
if p := recover(); p != nil {
logx.ErrorStack(p)
}
}
2023-05-08 23:49:13 +08:00
// 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 {
2023-05-08 23:49:13 +08:00
logx.WithContext(ctx).Errorf("%+v\n%s", p, debug.Stack())
}
}