diff --git a/maven-slf4j-wrapper/src/main/java/org/apache/maven/logwrapper/LogLevelRecorder.java b/maven-slf4j-wrapper/src/main/java/org/apache/maven/logwrapper/LogLevelRecorder.java index 9fa4b51307..4cbf32622e 100644 --- a/maven-slf4j-wrapper/src/main/java/org/apache/maven/logwrapper/LogLevelRecorder.java +++ b/maven-slf4j-wrapper/src/main/java/org/apache/maven/logwrapper/LogLevelRecorder.java @@ -21,17 +21,29 @@ package org.apache.maven.logwrapper; import org.slf4j.event.Level; +import java.util.HashMap; +import java.util.Map; + /** * Responsible for keeping state of whether the threshold of the --fail-on-severity flag has been hit. */ public class LogLevelRecorder { + private static final Map ACCEPTED_LEVELS = new HashMap<>(); + static + { + ACCEPTED_LEVELS.put( "WARN", Level.WARN ); + ACCEPTED_LEVELS.put( "WARNING", Level.WARN ); + ACCEPTED_LEVELS.put( "ERROR", Level.ERROR ); + } + private final Level logThreshold; private boolean metThreshold = false; public LogLevelRecorder( String threshold ) { - Level level = Level.valueOf( threshold ); + Level level = determineThresholdLevel( threshold ); + if ( level.toInt() < Level.WARN.toInt() ) { throw new IllegalArgumentException( "Logging severity thresholds can only be set to WARN or ERROR" ); @@ -40,6 +52,19 @@ public class LogLevelRecorder logThreshold = level; } + private Level determineThresholdLevel( String input ) + { + final Level result = ACCEPTED_LEVELS.get( input ); + if ( result == null ) + { + String message = String.format( + "%s is not a valid log severity threshold. Valid severities are WARN/WARNING and ERROR.", + input ); + throw new IllegalArgumentException( message ); + } + return result; + } + public void record( Level logLevel ) { if ( !metThreshold && logLevel.toInt() >= logThreshold.toInt() ) diff --git a/maven-slf4j-wrapper/src/test/java/org/apache/maven/logwrapper/LogLevelRecorderTest.java b/maven-slf4j-wrapper/src/test/java/org/apache/maven/logwrapper/LogLevelRecorderTest.java index 69b2853624..2bdb8670f7 100644 --- a/maven-slf4j-wrapper/src/test/java/org/apache/maven/logwrapper/LogLevelRecorderTest.java +++ b/maven-slf4j-wrapper/src/test/java/org/apache/maven/logwrapper/LogLevelRecorderTest.java @@ -22,7 +22,10 @@ package org.apache.maven.logwrapper; import org.junit.Test; import org.slf4j.event.Level; +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import static org.hamcrest.MatcherAssert.assertThat; public class LogLevelRecorderTest { @@ -41,9 +44,23 @@ public class LogLevelRecorderTest new LogLevelRecorder( "INFO" ); } - @Test( expected = IllegalArgumentException.class ) + @Test + public void createsLogLevelRecorderWithWarning() + { + LogLevelRecorder logLevelRecorder = new LogLevelRecorder( "WARNING" ); + logLevelRecorder.record( Level.ERROR ); + + assertTrue( logLevelRecorder.metThreshold() ); + } + + @Test public void failsOnUnknownLogLevel () { - new LogLevelRecorder( "SEVERE" ); + Throwable thrown = assertThrows( IllegalArgumentException.class, () -> new LogLevelRecorder( "SEVERE" ) ); + String message = thrown.getMessage(); + assertThat( message, containsString( "SEVERE is not a valid log severity threshold" ) ); + assertThat( message, containsString( "WARN" ) ); + assertThat( message, containsString( "WARNING" ) ); + assertThat( message, containsString( "ERROR" ) ); } } \ No newline at end of file