Skip to content

Commit 3fd8bb5

Browse files
author
Pankaj Agrawal
committed
fix: logging optimisations to reduce unnecessary logics and inits
1 parent 53ebb24 commit 3fd8bb5

File tree

4 files changed

+32
-17
lines changed

4 files changed

+32
-17
lines changed

powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaHandlerProcessor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,19 @@ public static boolean placedOnStreamHandler(final ProceedingJoinPoint pjp) {
5656
&& pjp.getArgs()[2] instanceof Context;
5757
}
5858

59-
public static Optional<Context> extractContext(final ProceedingJoinPoint pjp) {
59+
public static Context extractContext(final ProceedingJoinPoint pjp) {
6060

6161
if (isHandlerMethod(pjp)) {
6262
if (placedOnRequestHandler(pjp)) {
63-
return of((Context) pjp.getArgs()[1]);
63+
return (Context) pjp.getArgs()[1];
6464
}
6565

6666
if (placedOnStreamHandler(pjp)) {
67-
return of((Context) pjp.getArgs()[2]);
67+
return (Context) pjp.getArgs()[2];
6868
}
6969
}
7070

71-
return empty();
71+
return null;
7272
}
7373

7474
public static String serviceName() {

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
* {@see Logging}
2727
*/
2828
public final class LoggingUtils {
29-
private static ObjectMapper objectMapper = new ObjectMapper();
29+
private static ObjectMapper objectMapper;
3030

3131
private LoggingUtils() {
3232
}
@@ -93,6 +93,10 @@ public static void defaultObjectMapper(ObjectMapper objectMapper) {
9393
}
9494

9595
public static ObjectMapper objectMapper() {
96+
if(null == objectMapper) {
97+
objectMapper = new ObjectMapper();
98+
}
99+
96100
return objectMapper;
97101
}
98102
}

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

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Optional;
2424
import java.util.Random;
2525

26+
import com.amazonaws.services.lambda.runtime.Context;
2627
import com.fasterxml.jackson.core.JsonPointer;
2728
import com.fasterxml.jackson.core.JsonProcessingException;
2829
import com.fasterxml.jackson.databind.JsonNode;
@@ -85,12 +86,13 @@ public Object around(ProceedingJoinPoint pjp,
8586

8687
setLogLevelBasedOnSamplingRate(pjp, logging);
8788

88-
extractContext(pjp)
89-
.ifPresent(context -> {
90-
appendKeys(DefaultLambdaFields.values(context));
91-
appendKey("coldStart", isColdStart() ? "true" : "false");
92-
appendKey("service", serviceName());
93-
});
89+
Context extractContext = extractContext(pjp);
90+
91+
if(null != extractContext) {
92+
appendKeys(DefaultLambdaFields.values(extractContext));
93+
appendKey("coldStart", isColdStart() ? "true" : "false");
94+
appendKey("service", serviceName());
95+
}
9496

9597
getXrayTraceId().ifPresent(xRayTraceId -> appendKey("xray_trace_id", xRayTraceId));
9698

@@ -120,9 +122,9 @@ private static void resetLogLevels(Level logLevel) {
120122

121123
private void setLogLevelBasedOnSamplingRate(final ProceedingJoinPoint pjp,
122124
final Logging logging) {
125+
double samplingRate = samplingRate(logging);
126+
123127
if (isHandlerMethod(pjp)) {
124-
float sample = SAMPLER.nextFloat();
125-
double samplingRate = samplingRate(logging);
126128

127129
if (samplingRate < 0 || samplingRate > 1) {
128130
LOG.debug("Skipping sampling rate configuration because of invalid value. Sampling rate: {}", samplingRate);
@@ -131,6 +133,12 @@ private void setLogLevelBasedOnSamplingRate(final ProceedingJoinPoint pjp,
131133

132134
appendKey("samplingRate", String.valueOf(samplingRate));
133135

136+
if (samplingRate == 0) {
137+
return;
138+
}
139+
140+
float sample = SAMPLER.nextFloat();
141+
134142
if (samplingRate > sample) {
135143
resetLogLevels(Level.DEBUG);
136144

powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspect.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.lang.reflect.Field;
44

5+
import com.amazonaws.services.lambda.runtime.Context;
56
import org.aspectj.lang.ProceedingJoinPoint;
67
import org.aspectj.lang.annotation.Around;
78
import org.aspectj.lang.annotation.Aspect;
@@ -53,10 +54,12 @@ public Object around(ProceedingJoinPoint pjp,
5354

5455
logger.setNamespace(namespace(metrics));
5556

56-
extractContext(pjp).ifPresent((context) -> {
57-
coldStartSingleMetricIfApplicable(context.getAwsRequestId(), context.getFunctionName(), metrics);
58-
logger.putProperty(REQUEST_ID_PROPERTY, context.getAwsRequestId());
59-
});
57+
Context extractContext = extractContext(pjp);
58+
59+
if( null != extractContext) {
60+
coldStartSingleMetricIfApplicable(extractContext.getAwsRequestId(), extractContext.getFunctionName(), metrics);
61+
logger.putProperty(REQUEST_ID_PROPERTY, extractContext.getAwsRequestId());
62+
}
6063

6164
LambdaHandlerProcessor.getXrayTraceId()
6265
.ifPresent(traceId -> logger.putProperty(TRACE_ID_PROPERTY, traceId));

0 commit comments

Comments
 (0)