diff --git a/logging-modules/logback/pom.xml b/logging-modules/logback/pom.xml
index 91ff128632b7..0c2e2128ef55 100644
--- a/logging-modules/logback/pom.xml
+++ b/logging-modules/logback/pom.xml
@@ -76,9 +76,18 @@
provided
${lombok.version}
+
+ org.codehaus.janino
+ janino
+ ${janino.version}
+
+
+ net.logstash.logback
+ logstash-logback-encoder
+ ${logstash.version}
+
-
@@ -102,6 +111,8 @@
2.0.0
1.5.6
2.1.0-alpha1
+ 3.1.12
+ 8.0
\ No newline at end of file
diff --git a/logging-modules/logback/src/test/java/com/baeldung/logback/ConditionalLoggingUnitTest.java b/logging-modules/logback/src/test/java/com/baeldung/logback/ConditionalLoggingUnitTest.java
new file mode 100644
index 000000000000..bcfad4d7d256
--- /dev/null
+++ b/logging-modules/logback/src/test/java/com/baeldung/logback/ConditionalLoggingUnitTest.java
@@ -0,0 +1,66 @@
+package com.baeldung.logback;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.slf4j.LoggerFactory;
+
+import ch.qos.logback.classic.Logger;
+
+public class ConditionalLoggingUnitTest {
+
+ private static Logger logger;
+ private static ByteArrayOutputStream consoleOutput = new ByteArrayOutputStream();
+ private static PrintStream printStream = new PrintStream(consoleOutput);
+
+ @BeforeAll
+ public static void setUp() {
+ System.setProperty("logback.configurationFile", "src/test/resources/logback-conditional.xml");
+ // Redirect console output to our stream
+ System.setOut(printStream);
+ }
+
+ @Test
+ public void whenSystemPropertyIsNotPresent_thenReturnConsoleLogger() {
+ System.clearProperty("ENVIRONMENT");
+ logger = (Logger) LoggerFactory.getLogger(ConditionalLoggingUnitTest.class);
+
+ logger.info("test console log");
+ String logOutput = consoleOutput.toString();
+ assertTrue(logOutput.contains("test console log"));
+ }
+
+ @Test
+ public void whenSystemPropertyIsPresent_thenReturnFileLogger() throws IOException {
+ System.setProperty("ENVIRONMENT", "PROD");
+ logger = (Logger) LoggerFactory.getLogger(ConditionalLoggingUnitTest.class);
+
+ logger.info("test prod log");
+ String logOutput = FileUtils.readFileToString(new File("conditional.log"));
+ assertTrue(logOutput.contains("test prod log"));
+ }
+
+ @Test
+ public void whenMatchedWithEvaluatorFilter_thenReturnFilteredLogs() throws IOException {
+ logger = (Logger) LoggerFactory.getLogger(ConditionalLoggingUnitTest.class);
+
+ logger.info("normal log");
+ logger.info("billing details: XXXX");
+ String normalLog = FileUtils.readFileToString(new File("conditional.log"));
+ assertTrue(normalLog.contains("normal log"));
+ assertTrue(normalLog.contains("billing details: XXXX"));
+
+ String filteredLog = FileUtils.readFileToString(new File("filtered.log"));
+ assertTrue(filteredLog.contains("test prod log"));
+ assertFalse(filteredLog.contains("billing details: XXXX"));
+ }
+
+}
diff --git a/logging-modules/logback/src/test/resources/logback-conditional.xml b/logging-modules/logback/src/test/resources/logback-conditional.xml
new file mode 100644
index 000000000000..b2574ad3a4f1
--- /dev/null
+++ b/logging-modules/logback/src/test/resources/logback-conditional.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+ conditional.log
+
+ %d %-5level %logger{35} -%kvp- %msg %n
+
+
+
+
+
+
+
+
+
+ %d %-5level %logger{35} -%kvp- %msg %n
+
+
+
+
+
+
+
+
+
+ ERROR
+
+ ${LOG_STASH_URL}
+
+ {"app_name": "TestApp"}
+
+
+
+
+
+
+ filtered.log
+
+
+ return message.contains("billing");
+
+ DENY
+ NEUTRAL
+
+
+ %d %-4relative [%thread] %-5level %logger -%kvp -%msg%n
+
+
+
+
+
+ %d %-5level %logger{35} -%kvp- %msg %n
+
+
+
+
+
+
+
+
+
\ No newline at end of file