87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
package recovery
|
|
|
|
import (
|
|
"energy-management-system/core/logger"
|
|
"energy-management-system/global"
|
|
"energy-management-system/utils"
|
|
"energy-management-system/utils/code"
|
|
"energy-management-system/utils/exception"
|
|
"github.com/gin-gonic/gin"
|
|
"net"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
func GinRecovery(c *gin.Context) {
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
var brokenPipe bool
|
|
if ne, ok := err.(*net.OpError); ok {
|
|
if se, ok := ne.Err.(*os.SyscallError); ok {
|
|
if strings.Contains(strings.ToLower(se.Error()), "broken pipe") || strings.Contains(strings.ToLower(se.Error()), "connection reset by peer") {
|
|
brokenPipe = true
|
|
}
|
|
}
|
|
}
|
|
if brokenPipe {
|
|
c.Error(err.(error))
|
|
} else {
|
|
if req, ok := c.Get("_req"); ok {
|
|
global.Log.Errorln("获取参数:", utils.String(req))
|
|
}
|
|
if h, ok := err.(*exception.E); ok {
|
|
h.Return(c)
|
|
c.Errors = append(c.Errors, &gin.Error{Meta: h})
|
|
} else if e, ok := err.(error); ok {
|
|
global.Log.Errorln("未知错误:", err)
|
|
logger.StackSend(3, e.Error())
|
|
c.JSON(http.StatusForbidden, exception.E{code.UNKNOW_ERROR, "未知错误", nil})
|
|
} else {
|
|
global.Log.Errorln("服务器错误:", err)
|
|
logger.StackSend(3, err.(string))
|
|
c.JSON(http.StatusForbidden, exception.E{code.SERVER_ERROR, "服务器错误", nil})
|
|
}
|
|
}
|
|
c.Abort()
|
|
}
|
|
}()
|
|
c.Next()
|
|
}
|
|
|
|
//func GinRecovery() gin.HandlerFunc {
|
|
// return func(c *gin.Context) {
|
|
// defer func() {
|
|
// if err := recover(); err != nil {
|
|
// var brokenPipe bool
|
|
// if ne, ok := err.(*net.OpError); ok {
|
|
// if se, ok := ne.Err.(*os.SyscallError); ok {
|
|
// if strings.Contains(strings.ToLower(se.Error()), "broken pipe") || strings.Contains(strings.ToLower(se.Error()), "connection reset by peer") {
|
|
// brokenPipe = true
|
|
// }
|
|
// }
|
|
// }
|
|
// if brokenPipe {
|
|
// c.Error(err.(error))
|
|
// } else {
|
|
// if h, ok := err.(*exception.Exception); ok {
|
|
// exception.Panic(c, h)
|
|
// c.Errors = append(c.Errors, &gin.Error{Meta: h})
|
|
// } else if _, ok = err.(error); ok {
|
|
// if gin.IsDebugging() {
|
|
// fmt.Printf("[Recovery] %s : %s", utils.TimeFormat(time.Now()), err)
|
|
// utils.Stack(3)
|
|
// }
|
|
// exception.Unknow(c)
|
|
// } else {
|
|
// fmt.Print(err)
|
|
// exception.Server(c)
|
|
// }
|
|
// }
|
|
// c.Abort()
|
|
// }
|
|
// }()
|
|
// c.Next()
|
|
// }
|
|
//}
|