12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package middleware
- import (
- "gadmin/utility/serializer"
- "github.com/gin-gonic/gin"
- "github.com/sirupsen/logrus"
- "runtime/debug"
- )
- // Recover 异常接管
- func Recover(c *gin.Context) {
- defer func() {
- if r := recover(); r != nil {
- //打印错误堆栈信息
- logrus.Errorf("middleware recover: %v \n stack:%v \n", r, string(debug.Stack()))
- msg := errorToString(r)
- //// 生产环境隐藏报错
- //if gin.Mode() == gin.ReleaseMode {
- // msg = "服务器居然开小差了,请稍后再试吧!"
- //}
- serializer.JSONErrorExit(c, msg)
- c.Abort()
- }
- }()
- c.Next()
- }
- // recover错误,转string
- func errorToString(r interface{}) string {
- switch v := r.(type) {
- case error:
- return v.Error()
- case *logrus.Entry:
- str, err := r.(*logrus.Entry).String()
- if err != nil {
- return "recover错误:" + err.Error()
- }
- return str
- default:
- return r.(string)
- }
- }
|