potato/internal/middleware/recovery.go

49 lines
1.2 KiB
Go

/*
* @Date: 2021-06-12 22:29:16
* @LastEditors: viletyy
* @LastEditTime: 2021-06-12 23:10:53
* @FilePath: /potato/internal/middleware/recovery.go
*/
package middleware
import (
"fmt"
"time"
"github.com/gin-gonic/gin"
"github.com/viletyy/potato/global"
"github.com/viletyy/potato/pkg/app"
"github.com/viletyy/potato/pkg/email"
"github.com/viletyy/potato/pkg/errcode"
)
func Recovery() gin.HandlerFunc {
defaultMailer := email.NewEmail(&email.SMTPInfo{
Host: global.GO_CONFIG.Email.Host,
Port: global.GO_CONFIG.Email.Port,
IsSSL: global.GO_CONFIG.Email.IsSSL,
UserName: global.GO_CONFIG.Email.UserName,
Password: global.GO_CONFIG.Email.Password,
From: global.GO_CONFIG.Email.From,
})
return func(c *gin.Context) {
defer func() {
if err := recover(); err != nil {
global.GO_LOG.Sugar().Errorf("panic recover err: %v", err)
err := defaultMailer.SendMail(
global.GO_CONFIG.Email.To,
fmt.Sprintf("异常抛出,发生时间:%d", time.Now().Unix()),
fmt.Sprintf("错误信息:%v", err),
)
if err != nil {
global.GO_LOG.Sugar().Panicf("mail.SendMail err: %v", err)
}
app.NewResponse(c).ToErrorResponse(errcode.ServerError)
c.Abort()
}
}()
c.Next()
}
}