diff --git a/logging-modules/log4j2/pom.xml b/logging-modules/log4j2/pom.xml
index 48608fbc80..46b8b80597 100644
--- a/logging-modules/log4j2/pom.xml
+++ b/logging-modules/log4j2/pom.xml
@@ -59,10 +59,10 @@
- 2.8.5
+ 2.9.3
1.4.193
2.1.1
- 2.7
+ 2.10.0
diff --git a/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/JSONLayoutTest.java b/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/JSONLayoutTest.java
new file mode 100644
index 0000000000..9493c32094
--- /dev/null
+++ b/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/JSONLayoutTest.java
@@ -0,0 +1,45 @@
+package com.baeldung.logging.log4j2.tests;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class JSONLayoutTest {
+
+ private static Logger logger;
+ private ByteArrayOutputStream consoleOutput = new ByteArrayOutputStream();
+ private PrintStream ps = new PrintStream(consoleOutput);
+
+ @Before
+ public void setUp() {
+ // Redirect console output to our stream
+ System.setOut(ps);
+ logger = LogManager.getLogger("CONSOLE_JSON_APPENDER");
+ }
+
+ @Test
+ public void whenLogLayoutInJSON_thenOutputIsCorrectJSON() {
+ logger.debug("Debug message");
+ String currentLog = consoleOutput.toString();
+ assertTrue(!currentLog.isEmpty() && isValidJSON(currentLog));
+ }
+
+ public static boolean isValidJSON(String jsonInString) {
+ try {
+ final ObjectMapper mapper = new ObjectMapper();
+ mapper.readTree(jsonInString);
+ return true;
+ } catch (IOException e) {
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/logging-modules/log4j2/src/test/resources/log4j2.xml b/logging-modules/log4j2/src/test/resources/log4j2.xml
index 21fd1da446..4dcb7cce5a 100644
--- a/logging-modules/log4j2/src/test/resources/log4j2.xml
+++ b/logging-modules/log4j2/src/test/resources/log4j2.xml
@@ -1,16 +1,25 @@
-
+
-
+
-
+
-
+
+
+
+
+
+
@@ -19,53 +28,58 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
diff --git a/logging-modules/logback/pom.xml b/logging-modules/logback/pom.xml
index 8169134442..cd0d3758cc 100644
--- a/logging-modules/logback/pom.xml
+++ b/logging-modules/logback/pom.xml
@@ -1,6 +1,6 @@
4.0.0
@@ -12,6 +12,8 @@
UTF-8
1.2.3
+ 0.1.5
+ 2.9.3
@@ -28,7 +30,21 @@
logback-classic
${logback.version}
-
+
+ ch.qos.logback.contrib
+ logback-json-classic
+ ${logback.contrib.version}
+
+
+ ch.qos.logback.contrib
+ logback-jackson
+ ${logback.contrib.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
diff --git a/logging-modules/logback/src/test/java/com/baeldung/logback/JSONLayoutTest.java b/logging-modules/logback/src/test/java/com/baeldung/logback/JSONLayoutTest.java
new file mode 100644
index 0000000000..ca3c4b3457
--- /dev/null
+++ b/logging-modules/logback/src/test/java/com/baeldung/logback/JSONLayoutTest.java
@@ -0,0 +1,45 @@
+package com.baeldung.logback;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class JSONLayoutTest {
+
+ private static Logger logger;
+ private ByteArrayOutputStream consoleOutput = new ByteArrayOutputStream();
+ private PrintStream ps = new PrintStream(consoleOutput);
+
+ @Before
+ public void setUp() {
+ // Redirect console output to our stream
+ System.setOut(ps);
+ logger = LoggerFactory.getLogger("jsonLogger");
+ }
+
+ @Test
+ public void whenLogLayoutInJSON_thenOutputIsCorrectJSON() {
+ logger.debug("Debug message");
+ String currentLog = consoleOutput.toString();
+ assertTrue(!currentLog.isEmpty() && isValidJSON(currentLog));
+ }
+
+ public static boolean isValidJSON(String jsonInString) {
+ try {
+ final ObjectMapper mapper = new ObjectMapper();
+ mapper.readTree(jsonInString);
+ return true;
+ } catch (IOException e) {
+ return false;
+ }
+ }
+}
diff --git a/logging-modules/logback/src/test/resources/logback-test.xml b/logging-modules/logback/src/test/resources/logback-test.xml
index 8254e6ac80..df81f18cc2 100644
--- a/logging-modules/logback/src/test/resources/logback-test.xml
+++ b/logging-modules/logback/src/test/resources/logback-test.xml
@@ -1,14 +1,31 @@
-
+
+
+
test
-
+
+
+ # JSON appender
+
+
+
+ true
+
+ yyyy-MM-dd' 'HH:mm:ss.SSS
+
+
+
+
+
+
-
-
+
+
\ No newline at end of file