package logging import ( "github.com/labstack/echo/v5" "github.com/labstack/echo/v5/middleware" "go.uber.org/zap" ) // RequestLogger is an Echo middleware that logs HTTP requests using Zap func RequestLogger() echo.MiddlewareFunc { return middleware.RequestLoggerWithConfig(middleware.RequestLoggerConfig{ LogStatus: true, LogURI: true, LogMethod: true, HandleError: true, LogValuesFunc: func(c *echo.Context, v middleware.RequestLoggerValues) error { logger := GetLogger() fields := []zap.Field{ zap.String("method", v.Method), zap.String("uri", v.URI), zap.Int("status", v.Status), } if v.Error != nil { fields = append(fields, zap.String("error", v.Error.Error())) logger.Error("Request error", fields...) } else { logger.Info("Request completed", fields...) } return nil }, }) } // ErrorHandler is a custom error handler that logs errors func ErrorHandler(err error, c *echo.Context) { logger := GetLogger() logger.Error("Error occurred", zap.String("method", c.Request().Method), zap.String("path", c.Request().URL.Path), zap.String("error", err.Error()), ) }