diff --git a/libraries/helloWorld.docx b/libraries/helloWorld.docx
new file mode 100644
index 0000000000..09e71a4d4e
Binary files /dev/null and b/libraries/helloWorld.docx differ
diff --git a/logging-modules/logback/README.md b/logging-modules/logback/README.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/logging-modules/logback/pom.xml b/logging-modules/logback/pom.xml
new file mode 100644
index 0000000000..8169134442
--- /dev/null
+++ b/logging-modules/logback/pom.xml
@@ -0,0 +1,35 @@
+
+
+
+ 4.0.0
+
+ logback
+ logback
+ 0.1-SNAPSHOT
+
+
+ UTF-8
+ 1.2.3
+
+
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
+
+
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+
+
+
+
diff --git a/logging-modules/logback/src/main/java/com/baeldung/logback/Example.java b/logging-modules/logback/src/main/java/com/baeldung/logback/Example.java
new file mode 100644
index 0000000000..e3d09dc321
--- /dev/null
+++ b/logging-modules/logback/src/main/java/com/baeldung/logback/Example.java
@@ -0,0 +1,14 @@
+package com.baeldung.logback;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Example {
+
+ private static final Logger logger = LoggerFactory.getLogger(Example.class);
+
+ public static void main(String[] args) {
+ logger.info("Example log from {}", Example.class.getSimpleName());
+ }
+
+}
diff --git a/logging-modules/logback/src/main/java/com/baeldung/logback/MapAppender.java b/logging-modules/logback/src/main/java/com/baeldung/logback/MapAppender.java
new file mode 100644
index 0000000000..99cc6488e5
--- /dev/null
+++ b/logging-modules/logback/src/main/java/com/baeldung/logback/MapAppender.java
@@ -0,0 +1,37 @@
+package com.baeldung.logback;
+
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.AppenderBase;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MapAppender extends AppenderBase {
+
+ private final Map eventMap = new HashMap<>();
+
+ private String prefix;
+
+ @Override
+ protected void append(final ILoggingEvent event) {
+ if (prefix == null || "".equals(prefix)) {
+ addError("Prefix is not set for MapAppender.");
+ return;
+ }
+
+ eventMap.put(prefix + System.currentTimeMillis(), event);
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+
+ public void setPrefix(final String prefix) {
+ this.prefix = prefix;
+ }
+
+ public Map getEventMap() {
+ return eventMap;
+ }
+
+}
diff --git a/logging-modules/logback/src/main/resources/logback.xml b/logging-modules/logback/src/main/resources/logback.xml
new file mode 100644
index 0000000000..37ae2adbb0
--- /dev/null
+++ b/logging-modules/logback/src/main/resources/logback.xml
@@ -0,0 +1,18 @@
+
+
+
+ test
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java b/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java
new file mode 100644
index 0000000000..20366a229d
--- /dev/null
+++ b/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderIntegrationTest.java
@@ -0,0 +1,33 @@
+package com.baeldung.logback;
+
+import ch.qos.logback.classic.Logger;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.Assert.assertEquals;
+
+public class MapAppenderIntegrationTest {
+
+ private Logger rootLogger;
+
+ @Before
+ public void setUp() throws Exception {
+ rootLogger = (Logger) LoggerFactory.getLogger("ROOT");
+ }
+
+ @Test
+ public void whenLoggerEmitsLoggingEvent_thenAppenderReceivesEvent() throws Exception {
+ rootLogger.info("Test from {}", this.getClass().getSimpleName());
+ MapAppender appender = (MapAppender) rootLogger.getAppender("map");
+ assertEquals(appender.getEventMap().size(), 1);
+ }
+
+ @Test
+ public void givenNoPrefixSet_whenLoggerEmitsEvent_thenAppenderReceivesNoEvent() throws Exception {
+ rootLogger.info("Test from {}", this.getClass().getSimpleName());
+ MapAppender appender = (MapAppender) rootLogger.getAppender("badMap");
+ assertEquals(appender.getEventMap().size(), 0);
+ }
+
+}
diff --git a/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderTest.java b/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderTest.java
new file mode 100644
index 0000000000..a5a938a923
--- /dev/null
+++ b/logging-modules/logback/src/test/java/com/baeldung/logback/MapAppenderTest.java
@@ -0,0 +1,60 @@
+package com.baeldung.logback;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.core.BasicStatusManager;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class MapAppenderTest {
+
+ private LoggerContext ctx;
+
+ private MapAppender mapAppender = new MapAppender();
+
+ private LoggingEvent event;
+
+ @Before
+ public void setUp() throws Exception {
+ ctx = new LoggerContext();
+ ctx.setName("test context");
+ ctx.setStatusManager(new BasicStatusManager());
+ mapAppender.setContext(ctx);
+ mapAppender.setPrefix("prefix");
+ event = new LoggingEvent("fqcn", ctx.getLogger("logger"), Level.INFO, "Test message for logback appender", null, new Object[0]);
+ ctx.start();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ ctx.stop();
+ mapAppender.stop();
+ }
+
+ @Test
+ public void whenPrefixIsNull_thenMapAppenderDoesNotLog() throws Exception {
+ mapAppender.setPrefix(null);
+ mapAppender.append(event);
+ assertTrue(mapAppender.getEventMap().isEmpty());
+ }
+
+ @Test
+ public void whenPrefixIsEmpty_thenMapAppenderDoesNotLog() throws Exception {
+ mapAppender.setPrefix("");
+ mapAppender.append(event);
+ assertTrue(mapAppender.getEventMap().isEmpty());
+ }
+
+ @Test
+ public void whenLogMessageIsEmitted_thenMapAppenderReceivesMessage() throws Exception {
+ mapAppender.append(event);
+ assertEquals(mapAppender.getEventMap().size(), 1);
+ mapAppender.getEventMap().forEach((k, v) -> assertTrue(k.startsWith("prefix")));
+ }
+
+}
diff --git a/logging-modules/logback/src/test/resources/logback-test.xml b/logging-modules/logback/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..8254e6ac80
--- /dev/null
+++ b/logging-modules/logback/src/test/resources/logback-test.xml
@@ -0,0 +1,14 @@
+
+
+
+ test
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index cac0cc5845..c8fa30e8c9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -107,6 +107,7 @@
logging-modules/log-mdc
logging-modules/log4j
logging-modules/log4j2
+ logging-modules/logback
lombok
mapstruct
diff --git a/xml/src/test/resources/example_dom4j_new.xml b/xml/src/test/resources/example_dom4j_new.xml
new file mode 100644
index 0000000000..020760fdd3
--- /dev/null
+++ b/xml/src/test/resources/example_dom4j_new.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ XML with Dom4J
+ XML handling with Dom4J
+ 14/06/2016
+ Dom4J tech writer
+
+
diff --git a/xml/src/test/resources/example_jaxb_new.xml b/xml/src/test/resources/example_jaxb_new.xml
new file mode 100644
index 0000000000..646d938869
--- /dev/null
+++ b/xml/src/test/resources/example_jaxb_new.xml
@@ -0,0 +1,9 @@
+
+
+
+ Jaxb author
+ 04/02/2015
+ XML Binding with Jaxb
+ XML with Jaxb
+
+