package middleware import ( "net/http" "runtime/debug" "github.com/gin-gonic/gin" "go.uber.org/zap" ) // Recovery 恢复中间件 func Recovery(logger *zap.Logger) gin.HandlerFunc { return gin.CustomRecovery(func(c *gin.Context, recovered interface{}) { if err, ok := recovered.(string); ok { logger.Error("服务器恐慌", zap.String("error", err), zap.String("path", c.Request.URL.Path), zap.String("method", c.Request.Method), zap.String("ip", c.ClientIP()), zap.String("stack", string(debug.Stack())), ) } c.JSON(http.StatusInternalServerError, gin.H{ "code": 500, "message": "服务器内部错误", }) }) }