Merge pull request 'feat: 增加全局 panic 捕获的中间件' (#22) from feature/global_recover into master
Reviewed-on: #22
This commit was merged in pull request #22.
This commit is contained in:
@@ -53,4 +53,5 @@ const (
|
||||
CodeLogicErrorWrapper = "logic-error-wrapper"
|
||||
CodeLogicSseInitError = "sse-init-error"
|
||||
CodeLogicSseClosedError = "sse-closed-error"
|
||||
CodeServicePanic = "service-panic" // 服务发生 panic
|
||||
)
|
||||
|
||||
37
middleware/custom_recover.go
Normal file
37
middleware/custom_recover.go
Normal file
@@ -0,0 +1,37 @@
|
||||
// Package middleware ...
|
||||
//
|
||||
// Description : middleware ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2026-01-04 11:28
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"git.zhangdeman.cn/zhangdeman/exception"
|
||||
"git.zhangdeman.cn/zhangdeman/gin/define"
|
||||
"git.zhangdeman.cn/zhangdeman/gin/logger"
|
||||
"git.zhangdeman.cn/zhangdeman/gin/response"
|
||||
"git.zhangdeman.cn/zhangdeman/gin/util"
|
||||
pkgLogger "git.zhangdeman.cn/zhangdeman/logger"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func CustomRecover() gin.HandlerFunc {
|
||||
// 自定义 panic 捕获, 固定规则, 直接内置, 不暴露配置项
|
||||
return gin.CustomRecovery(func(c *gin.Context, err any) {
|
||||
logger.Instance.Error("服务发生panic被捕获,请检查日志", pkgLogger.NewLogData(util.GinCtxToContext(c), logger.RecordType, logger.CodeServicePanic, map[string]any{
|
||||
"err": err,
|
||||
}).ToFieldList()...)
|
||||
response.SendWithException(c, exception.New(http.StatusInternalServerError, map[string]any{
|
||||
"info": "Server Error",
|
||||
}), &define.ResponseOption{
|
||||
Extension: map[string]any{
|
||||
"err": err,
|
||||
},
|
||||
})
|
||||
c.Abort()
|
||||
})
|
||||
}
|
||||
@@ -115,6 +115,8 @@ type server struct {
|
||||
|
||||
func (s *server) getGlobalMiddlewareList(option *serverOption) []gin.HandlerFunc {
|
||||
globalMiddlewareList := make([]gin.HandlerFunc, 0)
|
||||
// 全局 panic 捕获
|
||||
globalMiddlewareList = append(globalMiddlewareList, middleware.CustomRecover())
|
||||
if nil != option.initContextData {
|
||||
globalMiddlewareList = append(globalMiddlewareList, option.initContextData) // 初始化一些全局的变量
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user