diff --git a/build.gradle b/build.gradle
index 827d85bd..9d7d0ee3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -15,7 +15,7 @@
plugins {
id 'java-library'
- id 'com.diffplug.spotless' version '5.1.0'
+ id 'com.diffplug.spotless' version '5.8.2'
id 'maven-publish'
id 'signing'
}
diff --git a/examples/lambda/build.gradle b/examples/lambda/build.gradle
index b5020878..0a217d1b 100644
--- a/examples/lambda/build.gradle
+++ b/examples/lambda/build.gradle
@@ -9,6 +9,10 @@ repositories {
dependencies {
implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
+ implementation "org.apache.logging.log4j:log4j-api:2.13.3"
+ implementation "org.apache.logging.log4j:log4j-core:2.13.3"
+ implementation "org.apache.logging.log4j:log4j-slf4j-impl:2.13.3"
+ implementation 'com.amazonaws:aws-lambda-java-log4j2:1.2.0'
implementation rootProject
}
diff --git a/examples/lambda/src/main/resources/log4j2.xml b/examples/lambda/src/main/resources/log4j2.xml
new file mode 100644
index 00000000..2330ecba
--- /dev/null
+++ b/examples/lambda/src/main/resources/log4j2.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/software/amazon/cloudwatchlogs/emf/environment/EnvironmentProvider.java b/src/main/java/software/amazon/cloudwatchlogs/emf/environment/EnvironmentProvider.java
index 7df3e9dc..49522b7b 100644
--- a/src/main/java/software/amazon/cloudwatchlogs/emf/environment/EnvironmentProvider.java
+++ b/src/main/java/software/amazon/cloudwatchlogs/emf/environment/EnvironmentProvider.java
@@ -54,12 +54,10 @@ public CompletableFuture resolveEnvironment() {
CompletableFuture> resolvedEnv = discoverEnvironmentAsync();
return resolvedEnv.thenApply(
- optionalEnv ->
- optionalEnv.orElseGet(
- () -> {
- cachedEnvironment = defaultEnvironment;
- return cachedEnvironment;
- }));
+ optionalEnv -> {
+ cachedEnvironment = optionalEnv.orElse(defaultEnvironment);
+ return cachedEnvironment;
+ });
}
public Environment getDefaultEnvironment() {
diff --git a/src/test/java/software/amazon/cloudwatchlogs/emf/environment/EnvironmentProviderTest.java b/src/test/java/software/amazon/cloudwatchlogs/emf/environment/EnvironmentProviderTest.java
index 3994574e..3407ce15 100644
--- a/src/test/java/software/amazon/cloudwatchlogs/emf/environment/EnvironmentProviderTest.java
+++ b/src/test/java/software/amazon/cloudwatchlogs/emf/environment/EnvironmentProviderTest.java
@@ -18,7 +18,7 @@
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.*;
import static org.powermock.api.mockito.PowerMockito.when;
import com.github.javafaker.Faker;
@@ -82,6 +82,28 @@ public void testResolveEnvironmentReturnsLambdaEnvironment() {
assertTrue(resolvedEnvironment.join() instanceof LambdaEnvironment);
}
+ @Test
+ public void testResolveEnvironmentFromCacheAfterSecondCall() {
+ environmentProvider.cleanResolvedEnvironment();
+ String lambdaFunctionName = faker.name().name();
+
+ PowerMockito.mockStatic(SystemWrapper.class);
+ when(SystemWrapper.getenv("AWS_LAMBDA_FUNCTION_NAME")).thenReturn(lambdaFunctionName);
+
+ // First call
+ CompletableFuture resolvedEnvironment =
+ environmentProvider.resolveEnvironment();
+
+ assertTrue(resolvedEnvironment.join() instanceof LambdaEnvironment);
+
+ // Second call
+ assertTrue(environmentProvider.resolveEnvironment().join() instanceof LambdaEnvironment);
+
+ // The SystemWrapper.getenv should only be called once due to cache
+ PowerMockito.verifyStatic(SystemWrapper.class);
+ SystemWrapper.getenv("AWS_LAMBDA_FUNCTION_NAME");
+ }
+
@Test
public void testResolveEnvironmentReturnsLambdaFromOverride() {
PowerMockito.mockStatic(EnvironmentConfigurationProvider.class);