From 1f846852995dc78dd7bee395803e8f157876263d Mon Sep 17 00:00:00 2001 From: Kinshuk Bairagi Date: Sat, 10 Aug 2024 18:53:19 +0530 Subject: [PATCH 1/2] Common-Log format for access.log --- .../flipkart/gjex/core/context/AccessLogContext.java | 4 +++- .../gjex/core/filter/grpc/AccessLogGrpcFilter.java | 5 +++-- .../gjex/core/filter/grpc/GrpcFilterConfig.java | 2 +- .../gjex/core/filter/http/HttpFilterConfig.java | 2 +- .../examples/helloworld/service/GreeterService.java | 2 +- examples/src/main/resources/hello_world_config.yml | 2 +- examples/src/main/resources/log4j2.xml | 12 ++++++------ .../gjex/grpc/interceptor/FilterInterceptor.java | 1 + 8 files changed, 17 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/com/flipkart/gjex/core/context/AccessLogContext.java b/core/src/main/java/com/flipkart/gjex/core/context/AccessLogContext.java index 7d157812..14e77358 100644 --- a/core/src/main/java/com/flipkart/gjex/core/context/AccessLogContext.java +++ b/core/src/main/java/com/flipkart/gjex/core/context/AccessLogContext.java @@ -8,7 +8,9 @@ import java.lang.reflect.Field; import java.time.Instant; import java.time.LocalDateTime; +import java.time.OffsetDateTime; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; import java.util.function.Supplier; @@ -58,7 +60,7 @@ private Map getValueMap() { } if (requestTime != null) { - String localDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(requestTime), ZoneId.systemDefault()).toString(); + String localDate = OffsetDateTime.ofInstant(Instant.ofEpochMilli(requestTime), ZoneId.systemDefault()).format(DateTimeFormatter.ISO_DATE_TIME); params.put("request-time", localDate); } params.put("thread", Thread.currentThread().getName()); diff --git a/core/src/main/java/com/flipkart/gjex/core/filter/grpc/AccessLogGrpcFilter.java b/core/src/main/java/com/flipkart/gjex/core/filter/grpc/AccessLogGrpcFilter.java index 1a82a2bf..9b60cf82 100644 --- a/core/src/main/java/com/flipkart/gjex/core/filter/grpc/AccessLogGrpcFilter.java +++ b/core/src/main/java/com/flipkart/gjex/core/filter/grpc/AccessLogGrpcFilter.java @@ -81,7 +81,8 @@ public void doProcessRequest(R req, RequestParams requestParamsInput) accessLogContextBuilder = AccessLogContext.builder() .requestTime(startTime) .clientIp(requestParamsInput.getClientIp()) - .resourcePath(requestParamsInput.getResourcePath()); + .resourcePath(requestParamsInput.getResourcePath()) + .method(requestParamsInput.getMethod()); Map headers = requestParamsInput.getMetadata().keys().stream() .collect(Collectors.toMap(String::toLowerCase, key -> @@ -92,7 +93,7 @@ public void doProcessRequest(R req, RequestParams requestParamsInput) } /** - * Placeholder method for processing response headers. Currently does not perform any operations. + * Placeholder method for processing response headers. Currently, does not perform any operations. * * @param responseHeaders The metadata associated with the gRPC response. */ diff --git a/core/src/main/java/com/flipkart/gjex/core/filter/grpc/GrpcFilterConfig.java b/core/src/main/java/com/flipkart/gjex/core/filter/grpc/GrpcFilterConfig.java index dd791c1f..648670af 100644 --- a/core/src/main/java/com/flipkart/gjex/core/filter/grpc/GrpcFilterConfig.java +++ b/core/src/main/java/com/flipkart/gjex/core/filter/grpc/GrpcFilterConfig.java @@ -34,5 +34,5 @@ public class GrpcFilterConfig { private boolean enableAccessLogs = true; @JsonProperty("accessLogFormat") - private String accessLogFormat = "{clientIp} {resourcePath} {responseStatus} {contentLength} {responseTime}"; + private String accessLogFormat = "{clientIp} - [{request-time}] \"{method} {resourcePath}\" {responseStatus} {contentLength} {responseTime}"; } diff --git a/core/src/main/java/com/flipkart/gjex/core/filter/http/HttpFilterConfig.java b/core/src/main/java/com/flipkart/gjex/core/filter/http/HttpFilterConfig.java index 6f269d2a..2c393c53 100644 --- a/core/src/main/java/com/flipkart/gjex/core/filter/http/HttpFilterConfig.java +++ b/core/src/main/java/com/flipkart/gjex/core/filter/http/HttpFilterConfig.java @@ -34,6 +34,6 @@ public class HttpFilterConfig { private boolean enableAccessLogs = true; @JsonProperty("accessLogFormat") - private String accessLogFormat = "{clientIp} \"{method} {resourcePath} {protocol}\" {responseStatus} {contentLength} {responseTime}"; + private String accessLogFormat = "{clientIp} - [{request-time}] \"{method} {resourcePath} {protocol}\" {responseStatus} {contentLength} {responseTime} \"{referer}\" \"{userAgent}\""; } diff --git a/examples/src/main/java/com/flipkart/gjex/examples/helloworld/service/GreeterService.java b/examples/src/main/java/com/flipkart/gjex/examples/helloworld/service/GreeterService.java index ba298bef..4b6bcb06 100644 --- a/examples/src/main/java/com/flipkart/gjex/examples/helloworld/service/GreeterService.java +++ b/examples/src/main/java/com/flipkart/gjex/examples/helloworld/service/GreeterService.java @@ -126,7 +126,7 @@ private void invokeGrpcCall(HelloRequest req, HelloReply reply) { @Override @Timed // the Timed annotation for publishing JMX metrics via MBean - @MethodFilters({LoggingFilter.class, AuthFilter.class}) // Method level filters + @MethodFilters({LoggingFilter.class}) // Method level filters @Traced(withSamplingRate = 0.0f) // Start a new Trace or participate in a Client-initiated distributed trace public StreamObserver pingPong(StreamObserver responseObserver) { diff --git a/examples/src/main/resources/hello_world_config.yml b/examples/src/main/resources/hello_world_config.yml index d008042a..7a66db25 100644 --- a/examples/src/main/resources/hello_world_config.yml +++ b/examples/src/main/resources/hello_world_config.yml @@ -3,7 +3,7 @@ Grpc: server.executorThreads : 4 filterConfig: enableAccessLogs: true - accessLogFormat: "{clientIp} {resourcePath} {contentLength} {responseStatus} {responseTime}" + accessLogFormat: '{clientIp} - [{request-time}] "{method} {resourcePath} GRPC" {responseStatus} {contentLength} {responseTime} "-" "-"' Dashboard: service.port: 9999 diff --git a/examples/src/main/resources/log4j2.xml b/examples/src/main/resources/log4j2.xml index 061bfe00..57182d95 100644 --- a/examples/src/main/resources/log4j2.xml +++ b/examples/src/main/resources/log4j2.xml @@ -1,19 +1,19 @@ - logs + /tmp/logs - - - + + + - - + + diff --git a/guice/src/main/java/com/flipkart/gjex/grpc/interceptor/FilterInterceptor.java b/guice/src/main/java/com/flipkart/gjex/grpc/interceptor/FilterInterceptor.java index d3877457..a60e9ad0 100644 --- a/guice/src/main/java/com/flipkart/gjex/grpc/interceptor/FilterInterceptor.java +++ b/guice/src/main/java/com/flipkart/gjex/grpc/interceptor/FilterInterceptor.java @@ -135,6 +135,7 @@ public void sendHeaders(final Metadata responseHeaders) { RequestParams requestParams = RequestParams.builder() .clientIp(getClientIp(call.getAttributes().get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR))) .resourcePath(call.getMethodDescriptor().getFullMethodName().toLowerCase()) + .method(call.getMethodDescriptor().getType().name()) .metadata(headers) .build(); From 0aacf524237d28767a36755be2be34a26d197887 Mon Sep 17 00:00:00 2001 From: Kinshuk Bairagi Date: Mon, 12 Aug 2024 16:27:36 +0530 Subject: [PATCH 2/2] camelCase requestTime --- .../java/com/flipkart/gjex/core/context/AccessLogContext.java | 2 +- .../com/flipkart/gjex/core/filter/grpc/GrpcFilterConfig.java | 2 +- .../com/flipkart/gjex/core/filter/http/HttpFilterConfig.java | 2 +- examples/src/main/resources/hello_world_config.yml | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/flipkart/gjex/core/context/AccessLogContext.java b/core/src/main/java/com/flipkart/gjex/core/context/AccessLogContext.java index 14e77358..0e7ec2c5 100644 --- a/core/src/main/java/com/flipkart/gjex/core/context/AccessLogContext.java +++ b/core/src/main/java/com/flipkart/gjex/core/context/AccessLogContext.java @@ -61,7 +61,7 @@ private Map getValueMap() { if (requestTime != null) { String localDate = OffsetDateTime.ofInstant(Instant.ofEpochMilli(requestTime), ZoneId.systemDefault()).format(DateTimeFormatter.ISO_DATE_TIME); - params.put("request-time", localDate); + params.put("requestTime", localDate); } params.put("thread", Thread.currentThread().getName()); if (userContext != null) diff --git a/core/src/main/java/com/flipkart/gjex/core/filter/grpc/GrpcFilterConfig.java b/core/src/main/java/com/flipkart/gjex/core/filter/grpc/GrpcFilterConfig.java index 648670af..4f0b3045 100644 --- a/core/src/main/java/com/flipkart/gjex/core/filter/grpc/GrpcFilterConfig.java +++ b/core/src/main/java/com/flipkart/gjex/core/filter/grpc/GrpcFilterConfig.java @@ -34,5 +34,5 @@ public class GrpcFilterConfig { private boolean enableAccessLogs = true; @JsonProperty("accessLogFormat") - private String accessLogFormat = "{clientIp} - [{request-time}] \"{method} {resourcePath}\" {responseStatus} {contentLength} {responseTime}"; + private String accessLogFormat = "{clientIp} - [{requestTime}] \"{method} {resourcePath}\" {responseStatus} {contentLength} {responseTime}"; } diff --git a/core/src/main/java/com/flipkart/gjex/core/filter/http/HttpFilterConfig.java b/core/src/main/java/com/flipkart/gjex/core/filter/http/HttpFilterConfig.java index 2c393c53..056272a0 100644 --- a/core/src/main/java/com/flipkart/gjex/core/filter/http/HttpFilterConfig.java +++ b/core/src/main/java/com/flipkart/gjex/core/filter/http/HttpFilterConfig.java @@ -34,6 +34,6 @@ public class HttpFilterConfig { private boolean enableAccessLogs = true; @JsonProperty("accessLogFormat") - private String accessLogFormat = "{clientIp} - [{request-time}] \"{method} {resourcePath} {protocol}\" {responseStatus} {contentLength} {responseTime} \"{referer}\" \"{userAgent}\""; + private String accessLogFormat = "{clientIp} - [{requestTime}] \"{method} {resourcePath} {protocol}\" {responseStatus} {contentLength} {responseTime} \"{referer}\" \"{userAgent}\""; } diff --git a/examples/src/main/resources/hello_world_config.yml b/examples/src/main/resources/hello_world_config.yml index 7a66db25..026d20c7 100644 --- a/examples/src/main/resources/hello_world_config.yml +++ b/examples/src/main/resources/hello_world_config.yml @@ -3,7 +3,7 @@ Grpc: server.executorThreads : 4 filterConfig: enableAccessLogs: true - accessLogFormat: '{clientIp} - [{request-time}] "{method} {resourcePath} GRPC" {responseStatus} {contentLength} {responseTime} "-" "-"' + accessLogFormat: '{clientIp} - [{requestTime}] "{method} {resourcePath} GRPC" {responseStatus} {contentLength} {responseTime} "-" "-"' Dashboard: service.port: 9999 @@ -21,7 +21,7 @@ Api: healthcheck.path: "/elb-healthcheck" filterConfig: enableAccessLogs: true - accessLogFormat: '{clientIp} - [{request-time}] "{method} {resourcePath} {protocol}" {responseStatus} {contentLength} {responseTime} "{referer}" "{userAgent}"' + accessLogFormat: '{clientIp} - [{requestTime}] "{method} {resourcePath} {protocol}" {responseStatus} {contentLength} {responseTime} "{referer}" "{userAgent}"' Tracing: collector.endpoint: http://localhost:9411/api/v2/spans