commit 605c77f08f02a02462a4b73fef4b3d0badceaacb Author: Vikas Saurabh Date: Wed Feb 15 09:08:36 2017 +0530 OAK-5663: Improve LogCutomizer to allow filtering on log messages too diff --git a/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/junit/LogCustomizer.java b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/junit/LogCustomizer.java index 19a2ad3..b7ec364 100644 --- a/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/junit/LogCustomizer.java +++ b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/junit/LogCustomizer.java @@ -80,6 +80,9 @@ public class LogCustomizer { private final String name; private Level enableLevel; private Level filterLevel; + private String matchExactMessage; + private String matchContainsMessage; + private String matchRegexMessage; private LogCustomizerBuilder(String name) { this.name = name; @@ -95,8 +98,23 @@ public class LogCustomizer { return this; } + public LogCustomizerBuilder exactlyMatches(String message) { + this.matchExactMessage = message; + return this; + } + + public LogCustomizerBuilder contains(String message) { + this.matchContainsMessage = message; + return this; + } + + public LogCustomizerBuilder matchesRegex(String message) { + this.matchRegexMessage = message; + return this; + } + public LogCustomizer create() { - return new LogCustomizer(name, enableLevel, filterLevel); + return new LogCustomizer(name, enableLevel, filterLevel, matchExactMessage, matchContainsMessage, matchRegexMessage); } } @@ -109,7 +127,8 @@ public class LogCustomizer { private final Appender customLogger; private LogCustomizer(String name, Level enableLevel, - final Level filterLevel) { + final Level filterLevel, + final String matchExactMessage, final String matchContainsMessage, final String matchRegexMessage) { this.logger = getLogger(name); if (enableLevel != null) { this.enableLevel = enableLevel; @@ -122,10 +141,32 @@ public class LogCustomizer { customLogger = new AppenderBase() { @Override protected void append(ILoggingEvent e) { + boolean logLevelOk = false; if (filterLevel == null) { - logs.add(e.getFormattedMessage()); + logLevelOk = true; } else if (e.getLevel().isGreaterOrEqual(filterLevel)) { - logs.add(e.getFormattedMessage()); + logLevelOk = true; + } + + if(logLevelOk) { + boolean messageMatchOk = true; + String message = e.getFormattedMessage(); + + if (messageMatchOk && matchExactMessage != null && !matchExactMessage.equals(message)) { + messageMatchOk = false; + } + + if (messageMatchOk && matchContainsMessage != null && !message.contains(matchContainsMessage)) { + messageMatchOk = false; + } + + if (messageMatchOk && matchRegexMessage != null && !message.matches(matchRegexMessage)) { + messageMatchOk = false; + } + + if (messageMatchOk) { + logs.add(e.getFormattedMessage()); + } } } }; diff --git a/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/junit/LogCustomizerTest.java b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/junit/LogCustomizerTest.java index 620180e..737c2bd 100644 --- a/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/junit/LogCustomizerTest.java +++ b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/junit/LogCustomizerTest.java @@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.commons.junit; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.matchers.JUnitMatchers.containsString; @@ -77,4 +78,88 @@ public class LogCustomizerTest { } } + @Test + public void testExactMatch() { + LogCustomizer custom = LogCustomizer + .forLogger("org.apache.jackrabbit.oak.commons.junit.LogCustomizerTest") + .exactlyMatches("Test Message") + .create(); + + try { + custom.starting(); + LOG.info("test message"); + LOG.info("test message 1"); + LOG.info("1 test message"); + + List logs = custom.getLogs(); + assertTrue(logs.isEmpty()); + + LOG.info("Test Message"); + assertEquals(1, logs.size()); + + } finally { + custom.finished(); + } + } + + + @Test + public void testContainsMatch() { + LogCustomizer custom = LogCustomizer + .forLogger("org.apache.jackrabbit.oak.commons.junit.LogCustomizerTest") + .contains("Test Message") + .create(); + + try { + custom.starting(); + LOG.info("test message"); + LOG.info("test message 1"); + LOG.info("1 test message"); + + List logs = custom.getLogs(); + assertTrue(logs.isEmpty()); + + LOG.info("Test Message"); + assertEquals(1, logs.size()); + + LOG.info("1Test Message"); + LOG.info("1Test Message2"); + LOG.info("1 Test Message"); + assertEquals(4, logs.size()); + + } finally { + custom.finished(); + } + } + + + @Test + public void testRegexMatch() { + LogCustomizer custom = LogCustomizer + .forLogger("org.apache.jackrabbit.oak.commons.junit.LogCustomizerTest") + .matchesRegex("^Length is [0-9]* units.$") + .create(); + + try { + custom.starting(); + LOG.info("test message"); + LOG.info("test message 1"); + LOG.info("1 test message"); + LOG.info("1 Length is 10 units."); + LOG.info("Length is 10 units.1"); + LOG.info("Length is abc units."); + + List logs = custom.getLogs(); + assertTrue(logs.isEmpty()); + + LOG.info("Length is 1 units."); + LOG.info("Length is 20 units."); + LOG.info("Length is units."); + assertEquals(3, logs.size()); + + } finally { + custom.finished(); + } + } + }