Skip to content

Commit 020414d

Browse files
author
Pankaj Agrawal
committed
support any Json Pointer path
1 parent e46dbcb commit 020414d

File tree

9 files changed

+40
-158
lines changed

9 files changed

+40
-158
lines changed

powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/CorrelationIdPath.java

-44
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package software.amazon.lambda.powertools.logging;
2+
3+
/**
4+
* Supported Event types from which Correlation ID can be extracted
5+
*/
6+
public class CorrelationIdPathConstants {
7+
/**
8+
* To use when function is expecting API Gateway Rest API Request event
9+
*/
10+
public static final String API_GATEWAY_REST = "/requestContext/requestId";
11+
/**
12+
* To use when function is expecting API Gateway HTTP API Request event
13+
*/
14+
public static final String API_GATEWAY_HTTP = "/requestContext/requestId";
15+
/**
16+
* To use when function is expecting Application Load balancer Request event
17+
*/
18+
public static final String APPLICATION_LOAD_BALANCER = "/headers/x-amzn-trace-id";
19+
/**
20+
* To use when function is expecting Event Bridge Request event
21+
*/
22+
public static final String EVENT_BRIDGE = "/id";
23+
}

powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/Logging.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
import java.lang.annotation.RetentionPolicy;
1919
import java.lang.annotation.Target;
2020

21-
import static software.amazon.lambda.powertools.logging.CorrelationIdPath.DISABLED;
22-
2321
/**
2422
* {@code Logging} is used to signal that the annotated method should be
2523
* extended with Logging functionality.
@@ -71,7 +69,8 @@
7169
double samplingRate() default 0;
7270

7371
/**
74-
* Type of Event from where to extract correlation id from.
72+
* Json Pointer path to extract correlation id from.
73+
* @see <a href=https://datatracker.ietf.org/doc/html/draft-ietf-appsawg-json-pointer-03/>
7574
*/
76-
CorrelationIdPath correlationIdPath() default DISABLED;
75+
String correlationIdPath() default "";
7776
}

powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspect.java

+9-35
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,9 @@
1919
import java.io.InputStream;
2020
import java.io.InputStreamReader;
2121
import java.io.OutputStreamWriter;
22-
import java.util.Arrays;
2322
import java.util.Map;
2423
import java.util.Optional;
2524
import java.util.Random;
26-
import java.util.function.Consumer;
27-
import java.util.function.Predicate;
2825

2926
import com.fasterxml.jackson.core.JsonPointer;
3027
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -39,7 +36,6 @@
3936
import org.aspectj.lang.annotation.Around;
4037
import org.aspectj.lang.annotation.Aspect;
4138
import org.aspectj.lang.annotation.Pointcut;
42-
import software.amazon.lambda.powertools.logging.CorrelationIdPath;
4339
import software.amazon.lambda.powertools.logging.Logging;
4440
import software.amazon.lambda.powertools.logging.LoggingUtils;
4541

@@ -54,8 +50,6 @@
5450
import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.placedOnRequestHandler;
5551
import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.placedOnStreamHandler;
5652
import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.serviceName;
57-
import static software.amazon.lambda.powertools.logging.CorrelationIdPath.AUTO_DETECT;
58-
import static software.amazon.lambda.powertools.logging.CorrelationIdPath.DISABLED;
5953
import static software.amazon.lambda.powertools.logging.LoggingUtils.appendKey;
6054
import static software.amazon.lambda.powertools.logging.LoggingUtils.appendKeys;
6155
import static software.amazon.lambda.powertools.logging.LoggingUtils.objectMapper;
@@ -103,7 +97,7 @@ public Object around(ProceedingJoinPoint pjp,
10397
proceedArgs = logEvent(pjp);
10498
}
10599

106-
if (logging.correlationIdPath() != DISABLED) {
100+
if (!logging.correlationIdPath().isEmpty()) {
107101
proceedArgs = captureCorrelationId(logging.correlationIdPath(), pjp);
108102
}
109103

@@ -173,7 +167,7 @@ private Object[] logEvent(final ProceedingJoinPoint pjp) {
173167
return args;
174168
}
175169

176-
private Object[] captureCorrelationId(final CorrelationIdPath correlationIdPath,
170+
private Object[] captureCorrelationId(final String correlationIdPath,
177171
final ProceedingJoinPoint pjp) {
178172
Object[] args = pjp.getArgs();
179173
if (isHandlerMethod(pjp)) {
@@ -205,37 +199,17 @@ private Object[] captureCorrelationId(final CorrelationIdPath correlationIdPath,
205199
return args;
206200
}
207201

208-
private void setCorrelationIdFromNode(CorrelationIdPath correlationIdPath, ProceedingJoinPoint pjp, JsonNode jsonNode) {
209-
if (correlationIdPath == AUTO_DETECT) {
210-
autoDetect(pjp, jsonNode);
211-
} else {
212-
JsonNode node = jsonNode.at(JsonPointer.compile(correlationIdPath.getPath()));
202+
private void setCorrelationIdFromNode(String correlationIdPath, ProceedingJoinPoint pjp, JsonNode jsonNode) {
203+
JsonNode node = jsonNode.at(JsonPointer.compile(correlationIdPath));
213204

214-
String asText = node.asText();
215-
if (null != asText && !asText.isEmpty()) {
216-
LoggingUtils.setCorrelationId(asText);
217-
} else {
218-
logger(pjp).debug("Unable to extract any correlation id. Is your function expecting supported event type?");
219-
}
205+
String asText = node.asText();
206+
if (null != asText && !asText.isEmpty()) {
207+
LoggingUtils.setCorrelationId(asText);
208+
} else {
209+
logger(pjp).debug("Unable to extract any correlation id. Is your function expecting supported event type?");
220210
}
221211
}
222212

223-
private void autoDetect(ProceedingJoinPoint pjp,
224-
JsonNode jsonNode) {
225-
Arrays.stream(CorrelationIdPath.values())
226-
.filter(path -> path != AUTO_DETECT && path != DISABLED)
227-
.forEach(correlationIdPath1 -> {
228-
JsonNode node = jsonNode.at(JsonPointer.compile(correlationIdPath1.getPath()));
229-
String asText = node.asText();
230-
231-
if (null != asText && !asText.isEmpty()) {
232-
logger(pjp).debug("Auto detected correlation id from event type: {}", correlationIdPath1);
233-
LoggingUtils.setCorrelationId(asText);
234-
}
235-
});
236-
}
237-
238-
239213
private Object[] logFromInputStream(final ProceedingJoinPoint pjp) {
240214
Object[] args = pjp.getArgs();
241215

powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolAlbCorrelationId.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@
1818
import com.amazonaws.services.lambda.runtime.events.ApplicationLoadBalancerRequestEvent;
1919
import org.apache.logging.log4j.LogManager;
2020
import org.apache.logging.log4j.Logger;
21+
import software.amazon.lambda.powertools.logging.CorrelationIdPathConstants;
2122
import software.amazon.lambda.powertools.logging.Logging;
2223

23-
import static software.amazon.lambda.powertools.logging.CorrelationIdPath.APPLICATION_LOAD_BALANCER;
24+
import static software.amazon.lambda.powertools.logging.CorrelationIdPathConstants.API_GATEWAY_REST;
25+
import static software.amazon.lambda.powertools.logging.CorrelationIdPathConstants.APPLICATION_LOAD_BALANCER;
2426

2527
public class PowerLogToolAlbCorrelationId implements RequestHandler<ApplicationLoadBalancerRequestEvent, Object> {
2628
private final Logger LOG = LogManager.getLogger(PowerLogToolAlbCorrelationId.class);
@@ -32,9 +34,4 @@ public Object handleRequest(ApplicationLoadBalancerRequestEvent input, Context c
3234
LOG.debug("Test debug event");
3335
return null;
3436
}
35-
36-
@Logging
37-
public void anotherMethod() {
38-
System.out.println("test");
39-
}
4037
}

powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolApiGatewayHttpApiCorrelationId.java

+1-8
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@
1515

1616
import com.amazonaws.services.lambda.runtime.Context;
1717
import com.amazonaws.services.lambda.runtime.RequestHandler;
18-
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
1918
import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent;
2019
import org.apache.logging.log4j.LogManager;
2120
import org.apache.logging.log4j.Logger;
2221
import software.amazon.lambda.powertools.logging.Logging;
2322

24-
import static software.amazon.lambda.powertools.logging.CorrelationIdPath.API_GATEWAY_HTTP;
25-
import static software.amazon.lambda.powertools.logging.CorrelationIdPath.API_GATEWAY_REST;
23+
import static software.amazon.lambda.powertools.logging.CorrelationIdPathConstants.API_GATEWAY_HTTP;
2624

2725
public class PowerLogToolApiGatewayHttpApiCorrelationId implements RequestHandler<APIGatewayV2HTTPEvent, Object> {
2826
private final Logger LOG = LogManager.getLogger(PowerLogToolApiGatewayHttpApiCorrelationId.class);
@@ -34,9 +32,4 @@ public Object handleRequest(APIGatewayV2HTTPEvent input, Context context) {
3432
LOG.debug("Test debug event");
3533
return null;
3634
}
37-
38-
@Logging
39-
public void anotherMethod() {
40-
System.out.println("test");
41-
}
4235
}

powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolApiGatewayRestApiCorrelationId.java

+1-6
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import org.apache.logging.log4j.Logger;
2121
import software.amazon.lambda.powertools.logging.Logging;
2222

23-
import static software.amazon.lambda.powertools.logging.CorrelationIdPath.API_GATEWAY_REST;
23+
import static software.amazon.lambda.powertools.logging.CorrelationIdPathConstants.API_GATEWAY_REST;
2424

2525
public class PowerLogToolApiGatewayRestApiCorrelationId implements RequestHandler<APIGatewayProxyRequestEvent, Object> {
2626
private final Logger LOG = LogManager.getLogger(PowerLogToolApiGatewayRestApiCorrelationId.class);
@@ -32,9 +32,4 @@ public Object handleRequest(APIGatewayProxyRequestEvent input, Context context)
3232
LOG.debug("Test debug event");
3333
return null;
3434
}
35-
36-
@Logging
37-
public void anotherMethod() {
38-
System.out.println("test");
39-
}
4035
}

powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/handlers/PowerLogToolAutoCorrelationId.java

-42
This file was deleted.

powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspectTest.java

-13
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
import software.amazon.lambda.powertools.logging.handlers.PowerLogToolAlbCorrelationId;
5151
import software.amazon.lambda.powertools.logging.handlers.PowerLogToolApiGatewayHttpApiCorrelationId;
5252
import software.amazon.lambda.powertools.logging.handlers.PowerLogToolApiGatewayRestApiCorrelationId;
53-
import software.amazon.lambda.powertools.logging.handlers.PowerLogToolAutoCorrelationId;
5453
import software.amazon.lambda.powertools.logging.handlers.PowerLogToolEnabled;
5554
import software.amazon.lambda.powertools.logging.handlers.PowerLogToolEnabledForStream;
5655
import software.amazon.lambda.powertools.logging.handlers.PowerToolDisabled;
@@ -290,18 +289,6 @@ void shouldLogCorrelationIdOnALBEvent(ApplicationLoadBalancerRequestEvent event)
290289
.containsEntry("correlation_id", event.getHeaders().get("x-amzn-trace-id"));
291290
}
292291

293-
@ParameterizedTest
294-
@Event(value = "albEvent.json", type = ApplicationLoadBalancerRequestEvent.class)
295-
void shouldLogCorrelationIdOnAutoDetect(ApplicationLoadBalancerRequestEvent event) {
296-
RequestHandler<ApplicationLoadBalancerRequestEvent, Object> handler = new PowerLogToolAutoCorrelationId();
297-
handler.handleRequest(event, context);
298-
299-
assertThat(ThreadContext.getImmutableContext())
300-
.hasSize(EXPECTED_CONTEXT_SIZE + 1)
301-
.containsEntry("correlation_id", event.getHeaders().get("x-amzn-trace-id"));
302-
}
303-
304-
305292
private void setupContext() {
306293
when(context.getFunctionName()).thenReturn("testFunction");
307294
when(context.getInvokedFunctionArn()).thenReturn("testArn");

0 commit comments

Comments
 (0)