123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package middleware
- import (
- "bytes"
- "github.com/sirupsen/logrus"
- "io"
- "strconv"
- "time"
- "lcfns/utils"
- utils2 "lcfns/utils"
- "github.com/gin-gonic/gin"
- "go.uber.org/zap"
- "lcfns/model/system"
- "lcfns/service"
- )
- var userService = service.ServiceGroupApp.SystemServiceGroup.UserService
- func ErrorToEmail() gin.HandlerFunc {
- return func(c *gin.Context) {
- var username string
- claims, _ := utils2.GetClaims(c)
- if claims.Username != "" {
- username = claims.Username
- } else {
- id, _ := strconv.Atoi(c.Request.Header.Get("x-user-id"))
- user, err := userService.FindUserById(id)
- if err != nil {
- username = "Unknown"
- }
- username = user.Username
- }
- body, _ := io.ReadAll(c.Request.Body)
- // 再重新写回请求体body中,ioutil.ReadAll会清空c.Request.Body中的数据
- c.Request.Body = io.NopCloser(bytes.NewBuffer(body))
- record := system.SysOperationRecord{
- Ip: c.ClientIP(),
- Method: c.Request.Method,
- Path: c.Request.URL.Path,
- Agent: c.Request.UserAgent(),
- Body: string(body),
- }
- now := time.Now()
- c.Next()
- latency := time.Since(now)
- status := c.Writer.Status()
- record.ErrorMessage = c.Errors.ByType(gin.ErrorTypePrivate).String()
- str := "接收到的请求为" + record.Body + "\n" + "请求方式为" + record.Method + "\n" + "报错信息如下" + record.ErrorMessage + "\n" + "耗时" + latency.String() + "\n"
- if status != 200 {
- subject := username + "" + record.Ip + "调用了" + record.Path + "报错了"
- if err := utils.ErrorToEmail(subject, str); err != nil {
- logrus.Error("ErrorToEmail Failed, err:", zap.Error(err))
- }
- }
- }
- }
|