Skip to content

Commit 5354828

Browse files
pankajagrawal16Pankaj Agrawal
and
Pankaj Agrawal
authored
chore: Logging and SQS utility Optimisations (#484)
* fix: logging optimisations to reduce unnecessary logics and inits * fix: lazy load sqs client Co-authored-by: Pankaj Agrawal <[email protected]>
1 parent 535cbc4 commit 5354828

File tree

5 files changed

+37
-18
lines changed

5 files changed

+37
-18
lines changed

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

+4-4
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

+5-1
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

+16-8
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 extractedContext = extractContext(pjp);
90+
91+
if(null != extractedContext) {
92+
appendKeys(DefaultLambdaFields.values(extractedContext));
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

+7-4
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 extractedContext = extractContext(pjp);
58+
59+
if( null != extractedContext) {
60+
coldStartSingleMetricIfApplicable(extractedContext.getAwsRequestId(), extractedContext.getFunctionName(), metrics);
61+
logger.putProperty(REQUEST_ID_PROPERTY, extractedContext.getAwsRequestId());
62+
}
6063

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

powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/SqsUtils.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public final class SqsUtils {
4141
private static final Logger LOG = LoggerFactory.getLogger(SqsUtils.class);
4242

4343
private static final ObjectMapper objectMapper = new ObjectMapper();
44-
private static SqsClient client = SqsClient.create();
44+
private static SqsClient client;
4545

4646
private SqsUtils() {
4747
}
@@ -231,6 +231,10 @@ public static <R> List<R> batchProcessor(final SQSEvent event,
231231
final SqsMessageHandler<R> handler) {
232232
final List<R> handlerReturn = new ArrayList<>();
233233

234+
if(client == null) {
235+
client = SqsClient.create();
236+
}
237+
234238
BatchContext batchContext = new BatchContext(client);
235239

236240
for (SQSMessage message : event.getRecords()) {

0 commit comments

Comments
 (0)