package middleware import ( "base-go-v2/internal/errs" "base-go-v2/internal/logx" "base-go-v2/internal/reponse" "base-go-v2/internal/router" "errors" "runtime/debug" ) func ErrorMiddleware() router.HandlerFunc { // 可扩展的业务错误类型列表 businessErrors := []interface{}{ (*errs.ValidationError)(nil), // (*errs.BusinessError)(nil), // (*errs.AuthError)(nil), } return func(c *router.Context) error { err := c.Next() if err == nil { return nil } // 判断是否属于业务错误 for _, be := range businessErrors { // be 是 nil 指针类型 if errors.As(err, &be) { // 业务错误,不记录日志 return response.Error(c).Message(err.Error()).Send() } } // 系统错误,记录日志 stack := string(debug.Stack()) logx.Logger.Error("请求错误", logx.String("path", string(c.RequestCtx.Path())), logx.String("method", string(c.RequestCtx.Method())), logx.String("error", err.Error()), logx.String("stack", stack), ) return response.Error(c).Message("服务器内部错误").Send() } }