diff --git a/aws-lambda-java-log4j2/pom.xml b/aws-lambda-java-log4j2/pom.xml
index 6f142d57c..469c2e1f0 100644
--- a/aws-lambda-java-log4j2/pom.xml
+++ b/aws-lambda-java-log4j2/pom.xml
@@ -35,6 +35,7 @@
1.8
1.8
2.25.4
+ 5.12.2
@@ -60,8 +61,30 @@
log4j-api
${log4j.version}
+
+ org.apache.logging.log4j
+ log4j-layout-template-json
+ ${log4j.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit-jupiter.version}
+ test
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.5.2
+
+
+
+
dev
@@ -146,4 +169,4 @@
-
\ No newline at end of file
+
diff --git a/aws-lambda-java-log4j2/src/test/java/com/amazonaws/services/lambda/runtime/log4j2/LambdaAppenderPluginTest.java b/aws-lambda-java-log4j2/src/test/java/com/amazonaws/services/lambda/runtime/log4j2/LambdaAppenderPluginTest.java
new file mode 100644
index 000000000..0bcd057a6
--- /dev/null
+++ b/aws-lambda-java-log4j2/src/test/java/com/amazonaws/services/lambda/runtime/log4j2/LambdaAppenderPluginTest.java
@@ -0,0 +1,86 @@
+/* Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. */
+
+package com.amazonaws.services.lambda.runtime.log4j2;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class LambdaAppenderPluginTest {
+
+ private final PrintStream originalOut = System.out;
+ private ByteArrayOutputStream captured;
+
+ @BeforeEach
+ void redirectStdout() throws UnsupportedEncodingException {
+ captured = new ByteArrayOutputStream();
+ System.setOut(new PrintStream(captured, true, StandardCharsets.UTF_8.name()));
+ }
+
+ @AfterEach
+ void restoreStdout() {
+ System.setOut(originalOut);
+ }
+
+ @Test
+ void lambdaAppenderEmitsLogsAtVariousLevels() throws UnsupportedEncodingException {
+ Logger logger = LogManager.getLogger(LambdaAppenderPluginTest.class);
+
+ logger.debug("debug-msg");
+ logger.info("info-msg");
+ logger.warn("warn-msg");
+ logger.error("error-msg");
+
+ String output = captured.toString(StandardCharsets.UTF_8.name());
+
+ // The PatternLayout in src/test/resources/log4j2.xml is "%-5p %c{1} - %m%n",
+ // so each event should appear as " LambdaAppenderPluginTest - ".
+ assertTrue(output.contains("DEBUG LambdaAppenderPluginTest - debug-msg"),
+ "expected DEBUG line in output but got:\n" + output);
+ assertTrue(output.contains("INFO LambdaAppenderPluginTest - info-msg"),
+ "expected INFO line in output but got:\n" + output);
+ assertTrue(output.contains("WARN LambdaAppenderPluginTest - warn-msg"),
+ "expected WARN line in output but got:\n" + output);
+ assertTrue(output.contains("ERROR LambdaAppenderPluginTest - error-msg"),
+ "expected ERROR line in output but got:\n" + output);
+
+ // Sanity check: log4j should not have fallen back to its default
+ // ConsoleAppender / status logger error message.
+ assertFalse(output.contains("ERROR StatusLogger"),
+ "log4j status logger reported an error, output was:\n" + output);
+ }
+
+ @Test
+ void lambdaAppenderEmitsJsonForJsonFormatLogger() throws UnsupportedEncodingException {
+ // The "json-test" logger is configured in src/test/resources/log4j2.xml
+ // with additivity=false to a second LambdaAppender using format="JSON"
+ // and JsonTemplateLayout backed by LambdaLayout.json.
+ Logger logger = LogManager.getLogger("json-test");
+
+ logger.info("json-info-msg");
+ logger.error("json-error-msg");
+
+ String output = captured.toString(StandardCharsets.UTF_8.name());
+
+ assertTrue(output.contains("json-info-msg"),
+ "expected json-info-msg in output but got:\n" + output);
+ assertTrue(output.contains("json-error-msg"),
+ "expected json-error-msg in output but got:\n" + output);
+
+ // Output should look like JSON, not the text PatternLayout from the
+ // root logger — so it must contain JSON field punctuation around the
+ // message rather than the "INFO json-test - ..." text pattern.
+ assertTrue(output.contains("\"message\":\"json-info-msg\""),
+ "expected JSON-encoded message field but got:\n" + output);
+ }
+}
diff --git a/aws-lambda-java-log4j2/src/test/resources/log4j2.xml b/aws-lambda-java-log4j2/src/test/resources/log4j2.xml
new file mode 100644
index 000000000..7b43094e2
--- /dev/null
+++ b/aws-lambda-java-log4j2/src/test/resources/log4j2.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ %-5p %c{1} - %m%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+