recover.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package middleware
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "hongze/hongze_yb/controller/response"
  6. "hongze/hongze_yb/global"
  7. "hongze/hongze_yb/services"
  8. "hongze/hongze_yb/utils"
  9. "net/http"
  10. "runtime"
  11. "time"
  12. )
  13. // Recover 异常处理
  14. func Recover() gin.HandlerFunc {
  15. return func(c *gin.Context) {
  16. defer func() {
  17. if err := recover(); err != nil {
  18. stack := ""
  19. msg := fmt.Sprintf("The request url is %v", c.Request.RequestURI)
  20. stack += msg + "</br>"
  21. global.LOG.Critical(msg)
  22. msg = fmt.Sprintf("The request data is %v", c.Params)
  23. stack += msg + "</br>"
  24. global.LOG.Critical(msg)
  25. msg = fmt.Sprintf("Handler crashed with error %v", err)
  26. stack += msg + "</br>"
  27. global.LOG.Critical(msg)
  28. for i := 1; ; i++ {
  29. _, file, line, ok := runtime.Caller(i)
  30. if !ok {
  31. break
  32. }
  33. global.LOG.Critical(fmt.Sprintf("%s:%d", file, line))
  34. stack = stack + fmt.Sprintln(fmt.Sprintf("%s:%d</br>", file, line))
  35. }
  36. fmt.Println("stack:", stack)
  37. response.Custom(http.StatusInternalServerError, "系统异常", c)
  38. //c.JSON(http.StatusInternalServerError, Err)
  39. go services.SendEmail(utils.APPNAME+"崩了"+time.Now().Format("2006-01-02 15:04:05"), stack, utils.EmailSendToUsers)
  40. return
  41. }
  42. }()
  43. c.Next()
  44. }
  45. }