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