recover.go 1.2 KB

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