Files
x_admin/server/middleware/error.go
xiangheng 8eb583397d init
2023-11-24 16:46:30 +08:00

38 lines
833 B
Go

package middleware
import (
"runtime/debug"
"x_admin/core"
"x_admin/core/response"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
// ErrorRecover 异常恢复中间件
func ErrorRecover() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if r := recover(); r != nil {
switch v := r.(type) {
// 自定义类型
case response.RespType:
core.Logger.WithOptions(zap.AddCallerSkip(2)).Warnf(
"Request Fail by recover: url=[%s], resp=[%+v]", c.Request.URL.Path, v)
var data interface{}
if v.Data() == nil {
data = []string{}
}
response.Result(c, v, data)
// 其他类型
default:
core.Logger.Errorf("stacktrace from panic: %+v\n%s", r, string(debug.Stack()))
response.Fail(c, response.SystemError)
}
c.Abort()
}
}()
c.Next()
}
}