From e9149b985bf358730a5a44072724e86b30788904 Mon Sep 17 00:00:00 2001 From: Wangjunqi123 Date: Thu, 7 Nov 2024 16:33:56 +0800 Subject: [PATCH] server: custom gin logger middleware --- cmd/server/db/redismanager/redis.go | 2 +- cmd/server/webserver/engine.go | 8 ++-- cmd/server/webserver/middleware/logger.go | 56 +++++++++++++++++++++++ 3 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 cmd/server/webserver/middleware/logger.go diff --git a/cmd/server/db/redismanager/redis.go b/cmd/server/db/redismanager/redis.go index c446b0e..d02edfd 100644 --- a/cmd/server/db/redismanager/redis.go +++ b/cmd/server/db/redismanager/redis.go @@ -233,7 +233,7 @@ func (r *RedisClient) UpdateTopoRunningAgentList(uuids []string, updateonce bool time.Sleep(1 * time.Second) } - logger.Info("running agent number: %d", running_agent_num) + global.ERManager.ErrorTransmit("db", "info", errors.Errorf("running agent number: %d", running_agent_num), false, false) return int(running_agent_num) } diff --git a/cmd/server/webserver/engine.go b/cmd/server/webserver/engine.go index 5272faa..16380cd 100644 --- a/cmd/server/webserver/engine.go +++ b/cmd/server/webserver/engine.go @@ -13,6 +13,7 @@ import ( "gitee.com/openeuler/PilotGo-plugin-topology/cmd/server/pluginclient" "gitee.com/openeuler/PilotGo-plugin-topology/cmd/server/webserver/frontendResource" "gitee.com/openeuler/PilotGo-plugin-topology/cmd/server/webserver/handle" + "gitee.com/openeuler/PilotGo-plugin-topology/cmd/server/webserver/middleware" "gitee.com/openeuler/PilotGo/sdk/logger" "github.com/gin-gonic/gin" "github.com/pkg/errors" @@ -26,9 +27,10 @@ func InitWebServer() { } engine := gin.New() - engine.Use(gin.Recovery(), gin.LoggerWithConfig(gin.LoggerConfig{ - Output: gin.DefaultWriter, - SkipPaths: []string{"/plugin/topology/api/heartbeat", "/plugin_manage/bind", "/"}, + engine.Use(gin.Recovery(), middleware.Logger([]string{ + "/plugin/topology/api/heartbeat", + "/plugin_manage/bind", + "/", })) gin.SetMode(gin.ReleaseMode) pluginclient.Global_Client.RegisterHandlers(engine) diff --git a/cmd/server/webserver/middleware/logger.go b/cmd/server/webserver/middleware/logger.go new file mode 100644 index 0000000..0950fdb --- /dev/null +++ b/cmd/server/webserver/middleware/logger.go @@ -0,0 +1,56 @@ +package middleware + +import ( + "time" + + "gitee.com/openeuler/PilotGo-plugin-topology/cmd/server/global" + "github.com/gin-gonic/gin" + "github.com/pkg/errors" +) + +func Logger(_skipPaths []string) gin.HandlerFunc { + var skip map[string]struct{} + + if len(_skipPaths) > 0 { + skip = make(map[string]struct{}, len(_skipPaths)) + + for _, path := range _skipPaths { + skip[path] = struct{}{} + } + } + + return func(c *gin.Context) { + start := time.Now() + path := c.Request.URL.Path + raw := c.Request.URL.RawQuery + + c.Next() + + if _, ok := skip[path]; !ok { + endTime := time.Now() + latency := endTime.Sub(start) + method := c.Request.Method + statusCode := c.Writer.Status() + clientIP := c.ClientIP() + errorMessage := c.Errors.ByType(gin.ErrorTypePrivate).String() + + if raw != "" { + path = path + "?" + raw + } + + if latency > time.Minute { + latency = latency.Truncate(time.Second) + } + + global.ERManager.ErrorTransmit("gin", "debug", errors.Errorf("|%3d| %-13v | %-15s |%-7s %#v\n%s", + statusCode, + latency, + clientIP, + method, + path, + errorMessage), + false, false, + ) + } + } +} -- Gitee