recovery.go 591 B

1234567891011121314151617181920212223242526
  1. package middleware
  2. import (
  3. "app/commons/constant"
  4. "app/commons/core"
  5. "github.com/gin-gonic/gin"
  6. "runtime"
  7. )
  8. // Recovery 全局错误恢复中间件
  9. func Recovery() gin.HandlerFunc {
  10. return func(c *gin.Context) {
  11. defer func() {
  12. if err := recover(); err != nil {
  13. // 打印错误堆栈信息
  14. stack := make([]byte, 4096)
  15. length := runtime.Stack(stack, false)
  16. core.JobLog.Errorf("[Recovery] panic recovered:\n%s\n%s", err, stack[:length])
  17. // 设置响应头,确保返回 JSON 格式
  18. core.Resp(c, constant.ErrorInfo)
  19. c.Abort()
  20. }
  21. }()
  22. c.Next()
  23. }
  24. }