From 7cb671e6cce38b56c475c758564045a8a9874907 Mon Sep 17 00:00:00 2001 From: ata <17314593+asdxzaaaaa@user.noreply.gitee.com> Date: Fri, 10 Jul 2026 10:06:45 +0000 Subject: [PATCH] Add internal/middleware/logger.go --- internal/middleware/logger.go | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 internal/middleware/logger.go diff --git a/internal/middleware/logger.go b/internal/middleware/logger.go new file mode 100644 index 0000000..d2e5bab --- /dev/null +++ b/internal/middleware/logger.go @@ -0,0 +1,44 @@ +package middleware + +import ( + "log" + "time" + + "github.com/gin-gonic/gin" +) + +// Logger 结构化日志中间件,记录请求 ID、方法、路径、状态码、耗时、客户端 IP +func Logger() gin.HandlerFunc { + return func(c *gin.Context) { + start := time.Now() + path := c.Request.URL.Path + if raw := c.Request.URL.RawQuery; raw != "" { + path = path + "?" + raw + } + + c.Next() + + cost := time.Since(start) + rid := GetRequestID(c) + status := c.Writer.Status() + + // 根据状态码选择日志级别标记 + level := "INFO" + if status >= 500 { + level = "ERROR" + } else if status >= 400 { + level = "WARN" + } + + log.Printf("[%s] req_id=%s | %s %s | %d | %s | ip=%s | size=%d", + level, + rid, + c.Request.Method, + path, + status, + cost.String(), + c.ClientIP(), + c.Writer.Size(), + ) + } +}