diff --git a/logging-modules/log4j2/pom.xml b/logging-modules/log4j2/pom.xml
index 89d37e789c..65da318636 100644
--- a/logging-modules/log4j2/pom.xml
+++ b/logging-modules/log4j2/pom.xml
@@ -18,6 +18,13 @@
log4j-core
${log4j-core.version}
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+ ${log4j-core.version}
+
@@ -114,4 +121,4 @@
yyyyMMddHHmmss
-
+
\ No newline at end of file
diff --git a/logging-modules/log4j2/src/main/java/com/baeldung/logging/log4j2/appender/MapAppender.java b/logging-modules/log4j2/src/main/java/com/baeldung/logging/log4j2/appender/MapAppender.java
new file mode 100644
index 0000000000..2015b6d573
--- /dev/null
+++ b/logging-modules/log4j2/src/main/java/com/baeldung/logging/log4j2/appender/MapAppender.java
@@ -0,0 +1,54 @@
+/**
+ *
+ */
+package com.baeldung.logging.log4j2.appender;
+
+import java.time.Instant;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.Core;
+import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.AbstractAppender;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginElement;
+import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+
+@Plugin(name = "MapAppender", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE)
+public class MapAppender extends AbstractAppender {
+
+ private ConcurrentMap eventMap = new ConcurrentHashMap<>();
+
+ protected MapAppender(String name, Filter filter) {
+ super(name, filter, null);
+ }
+
+ @PluginFactory
+ public static MapAppender createAppender(@PluginAttribute("name") String name, @PluginElement("Filter") final Filter filter) {
+ return new MapAppender(name, filter);
+ }
+
+ @Override
+ public void append(LogEvent event) {
+ if (event.getLevel()
+ .isLessSpecificThan(Level.WARN)) {
+ error("Unable to log less than WARN level.");
+ return;
+ }
+ eventMap.put(Instant.now()
+ .toString(), event);
+ }
+
+ public ConcurrentMap getEventMap() {
+ return eventMap;
+ }
+
+ public void setEventMap(ConcurrentMap eventMap) {
+ this.eventMap = eventMap;
+ }
+
+}
diff --git a/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/appender/MapAppenderIntegrationTest.java b/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/appender/MapAppenderIntegrationTest.java
new file mode 100644
index 0000000000..020aaafc74
--- /dev/null
+++ b/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/appender/MapAppenderIntegrationTest.java
@@ -0,0 +1,35 @@
+package com.baeldung.logging.log4j2.appender;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class MapAppenderIntegrationTest {
+
+ private Logger logger;
+
+ @Before
+ public void setup() {
+ logger = LogManager.getLogger(MapAppenderIntegrationTest.class);
+ }
+
+ @Test
+ public void whenLoggerEmitsLoggingEvent_thenAppenderReceivesEvent() throws Exception {
+ logger.info("Test from {}", this.getClass()
+ .getSimpleName());
+ LoggerContext context = LoggerContext.getContext(false);
+ Configuration config = context.getConfiguration();
+ MapAppender appender = config.getAppender("MapAppender");
+ assertEquals(appender.getEventMap()
+ .size(), 1);
+ }
+
+}
diff --git a/logging-modules/log4j2/src/test/resources/log4j2.xml b/logging-modules/log4j2/src/test/resources/log4j2.xml
index 83b664a507..246ffb0707 100644
--- a/logging-modules/log4j2/src/test/resources/log4j2.xml
+++ b/logging-modules/log4j2/src/test/resources/log4j2.xml
@@ -1,6 +1,6 @@
-
+
@@ -50,6 +50,7 @@
size="17 kB" />
+
+
\ No newline at end of file