From 22f4fac069b31fa54dc1d446e5b7e35c6906c7a1 Mon Sep 17 00:00:00 2001 From: ata <17314593+asdxzaaaaa@user.noreply.gitee.com> Date: Fri, 10 Jul 2026 10:06:44 +0000 Subject: [PATCH] Add internal/middleware/recover.go --- internal/middleware/recover.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 internal/middleware/recover.go diff --git a/internal/middleware/recover.go b/internal/middleware/recover.go new file mode 100644 index 0000000..7a4ea00 --- /dev/null +++ b/internal/middleware/recover.go @@ -0,0 +1,28 @@ +package middleware + +import ( + "log" + "net/http" + "runtime/debug" + + "github.com/gin-gonic/gin" +) + +// Recover panic 恢复中间件,捕获 panic 并返回 500 JSON,同时记录请求 ID 和堆栈 +func Recover() gin.HandlerFunc { + return func(c *gin.Context) { + defer func() { + if r := recover(); r != nil { + rid := GetRequestID(c) + log.Printf("[ERROR] req_id=%s | panic recovered: %v\n%s", rid, r, debug.Stack()) + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{ + "code": 1, + "message": "服务器内部错误", + "request_id": rid, + "data": nil, + }) + } + }() + c.Next() + } +}