package middleware import ( "time" "github.com/gofiber/fiber/v2" "go.uber.org/zap" ) type LoggingConfig struct { Logger *zap.Logger SkipPaths []string } func Logging(config LoggingConfig) fiber.Handler { logger := config.Logger if logger == nil { logger, _ = zap.NewProduction() } skipPaths := make(map[string]bool) for _, path := range config.SkipPaths { skipPaths[path] = true } return func(c *fiber.Ctx) error { path := c.Path() if skipPaths[path] { return c.Next() } start := time.Now() err := c.Next() duration := time.Since(start) logger.Info("request", zap.String("method", c.Method()), zap.String("path", path), zap.Int("status", c.Response().StatusCode()), zap.Duration("latency", duration), zap.String("ip", c.IP()), zap.String("user-agent", c.Get("User-Agent")), ) return err } }