diff --git a/pkg/api/rest/server/server.go b/pkg/api/rest/server/server.go index 45152b0..c872bd4 100644 --- a/pkg/api/rest/server/server.go +++ b/pkg/api/rest/server/server.go @@ -93,7 +93,57 @@ func RunServer(port string) { e := echo.New() // Middleware - e.Use(middleware.Logger()) + // e.Use(middleware.Logger()) // default logger middleware in echo + + // Custom logger middleware with zerolog + e.Use(middleware.RequestLoggerWithConfig(middleware.RequestLoggerConfig{ + LogError: true, + LogRequestID: true, + LogRemoteIP: true, + LogHost: true, + LogMethod: true, + LogURI: true, + LogUserAgent: true, + LogStatus: true, + LogLatency: true, + LogContentLength: true, + LogResponseSize: true, + // HandleError: true, // forwards error to the global error handler, so it can decide appropriate status code + LogValuesFunc: func(c echo.Context, v middleware.RequestLoggerValues) error { + if v.Error == nil { + log.Info(). + Str("id", v.RequestID). + Str("remote_ip", v.RemoteIP). + Str("host", v.Host). + Str("method", v.Method). + Str("URI", v.URI). + Str("user_agent", v.UserAgent). + Int("status", v.Status). + Int64("latency", v.Latency.Nanoseconds()). + Str("latency_human", v.Latency.String()). + Str("bytes_in", v.ContentLength). + Int64("bytes_out", v.ResponseSize). + Msg("request") + } else { + log.Error(). + Err(v.Error). + Str("id", v.RequestID). + Str("remote_ip", v.RemoteIP). + Str("host", v.Host). + Str("method", v.Method). + Str("URI", v.URI). + Str("user_agent", v.UserAgent). + Int("status", v.Status). + Int64("latency", v.Latency.Nanoseconds()). + Str("latency_human", v.Latency.String()). + Str("bytes_in", v.ContentLength). + Int64("bytes_out", v.ResponseSize). + Msg("request error") + } + return nil + }, + })) + e.Use(middleware.Recover()) // limit the application to 20 requests/sec using the default in-memory store e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(20))) @@ -148,6 +198,7 @@ func RunServer(port string) { // Route for system management e.GET("/beetle/swagger/*", echoSwagger.WrapHandler) + // e.GET("/beetle/swaggerActive", rest_common.RestGetSwagger) e.GET("/beetle/health", rest_common.RestGetHealth) e.GET("/beetle/httpVersion", rest_common.RestCheckHTTPVersion) @@ -221,8 +272,8 @@ func RunServer(port string) { // Block until a signal is triggered <-gracefulShutdownContext.Done() - fmt.Println("\n[Stop] CM-Beetle REST Server") - log.Info().Msg("stopping CM-Beetle REST Server") + fmt.Println("\n[Stop] CM-Beetle REST API server") + log.Info().Msg("stopping CM-Beetle REST API server") ctx, cancel := context.WithTimeout(context.TODO(), 3*time.Second) defer cancel()