You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
791 B
41 lines
791 B
package middleware |
|
|
|
import ( |
|
"time" |
|
|
|
"github.com/gin-gonic/gin" |
|
"go.uber.org/zap" |
|
) |
|
|
|
// Logger 日志中间件 |
|
func Logger(logger *zap.Logger) gin.HandlerFunc { |
|
return func(c *gin.Context) { |
|
start := time.Now() |
|
path := c.Request.URL.Path |
|
raw := c.Request.URL.RawQuery |
|
|
|
// 处理请求 |
|
c.Next() |
|
|
|
// 记录请求信息 |
|
latency := time.Since(start) |
|
clientIP := c.ClientIP() |
|
method := c.Request.Method |
|
statusCode := c.Writer.Status() |
|
bodySize := c.Writer.Size() |
|
|
|
if raw != "" { |
|
path = path + "?" + raw |
|
} |
|
|
|
// 记录访问日志 |
|
logger.Info("HTTP Request", |
|
zap.String("method", method), |
|
zap.String("path", path), |
|
zap.Int("status", statusCode), |
|
zap.String("ip", clientIP), |
|
zap.Duration("latency", latency), |
|
zap.Int("size", bodySize), |
|
) |
|
} |
|
}
|
|
|