From e26ec2af9746e63276d0674915aa99679ad8f163 Mon Sep 17 00:00:00 2001 From: Wangjunqi123 Date: Tue, 3 Dec 2024 14:08:19 +0800 Subject: [PATCH] cmd/server: rewrite gin logger middleware --- cmd/server/app/network/httpserver.go | 5 ++- sdk/logger/logger.go | 64 +++++++++++++++------------- 2 files changed, 38 insertions(+), 31 deletions(-) diff --git a/cmd/server/app/network/httpserver.go b/cmd/server/app/network/httpserver.go index 67c7eedc..2553b350 100644 --- a/cmd/server/app/network/httpserver.go +++ b/cmd/server/app/network/httpserver.go @@ -112,7 +112,10 @@ func setupRouter() *gin.Engine { gin.SetMode(gin.ReleaseMode) router := gin.New() router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) - router.Use(logger.RequestLogger()) + router.Use(logger.RequestLogger([]string{ + "/api/v1/pluginapi/heartbeat", + "/plugin/prometheus/target", + })) router.Use(middleware.Recover) // 绑定 http api handler diff --git a/sdk/logger/logger.go b/sdk/logger/logger.go index aa9b00a1..2bf6cfef 100644 --- a/sdk/logger/logger.go +++ b/sdk/logger/logger.go @@ -120,41 +120,45 @@ func Fatal(format string, args ...interface{}) { logrus.Fatalf(format, args...) } -func RequestLogger() gin.HandlerFunc { +func RequestLogger(_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) { - // 开始时间 - startTime := time.Now() + start := time.Now() + path := c.Request.URL.Path + raw := c.Request.URL.RawQuery - // 处理请求 c.Next() - // 结束时间 - endTime := time.Now() - - // 执行时间 - latencyTime := endTime.Sub(startTime) - - // 请求方式 - reqMethod := c.Request.Method - - // 请求路由 - reqUri := c.Request.RequestURI - - // 状态码 - statusCode := c.Writer.Status() - - // 请求IP - clientIP := c.ClientIP() - - // 日志格式 - if reqUri != "/api/v1/pluginapi/heartbeat" && reqUri != "/plugin/prometheus/target" { - Debug("status_code:%d latency_time:%s client_ip:%s req_method:%s req_uri:%s", + 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) + } + + Debug("%s|%3d|%-13v|%-15s|%-7s %#v\n%s", + start.Format("2006-01-02 15:04:05"), statusCode, - latencyTime, + latency, clientIP, - reqMethod, - reqUri, - ) + method, + path, + errorMessage) } } -} +} \ No newline at end of file -- Gitee