diff --git a/impl/maven-logging/src/main/java/org/apache/maven/logging/api/LogLevelRecorder.java b/impl/maven-logging/src/main/java/org/apache/maven/logging/api/LogLevelRecorder.java index 25ccc266e229..b15e3e5dadbb 100644 --- a/impl/maven-logging/src/main/java/org/apache/maven/logging/api/LogLevelRecorder.java +++ b/impl/maven-logging/src/main/java/org/apache/maven/logging/api/LogLevelRecorder.java @@ -34,4 +34,6 @@ enum Level { Level getMaxLevelAllowed(); void setMaxLevelAllowed(Level level); + + void reset(); } diff --git a/impl/maven-logging/src/main/java/org/apache/maven/slf4j/DefaultLogLevelRecorder.java b/impl/maven-logging/src/main/java/org/apache/maven/slf4j/DefaultLogLevelRecorder.java index b1b9b7de668e..8e1f204cef99 100644 --- a/impl/maven-logging/src/main/java/org/apache/maven/slf4j/DefaultLogLevelRecorder.java +++ b/impl/maven-logging/src/main/java/org/apache/maven/slf4j/DefaultLogLevelRecorder.java @@ -18,8 +18,6 @@ */ package org.apache.maven.slf4j; -import java.util.HashMap; -import java.util.Map; import java.util.concurrent.atomic.AtomicReference; import org.apache.maven.logging.api.LogLevelRecorder; @@ -28,25 +26,9 @@ * Responsible for keeping state of whether the threshold of the --fail-on-severity flag has been hit. */ public class DefaultLogLevelRecorder implements 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 Level maxAllowed; private final AtomicReference maxReached = new AtomicReference<>(Level.DEBUG); - public DefaultLogLevelRecorder(String threshold) { - this(determineThresholdLevel(threshold)); - } - - public DefaultLogLevelRecorder(Level maxAllowed) { - this.maxAllowed = maxAllowed; - } - @Override public boolean hasReachedMaxLevel() { return maxReached.get().ordinal() > maxAllowed.ordinal(); @@ -67,14 +49,10 @@ public void setMaxLevelAllowed(Level level) { this.maxAllowed = level; } - private static 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; + @Override + public void reset() { + this.maxAllowed = null; + this.maxReached.set(Level.DEBUG); } public void record(org.slf4j.event.Level logLevel) { @@ -97,6 +75,6 @@ public void record(org.slf4j.event.Level logLevel) { } public boolean metThreshold() { - return maxReached.get().ordinal() >= maxAllowed.ordinal(); + return maxAllowed != null && maxReached.get().ordinal() >= maxAllowed.ordinal(); } } diff --git a/impl/maven-logging/src/main/java/org/apache/maven/slf4j/MavenLoggerFactory.java b/impl/maven-logging/src/main/java/org/apache/maven/slf4j/MavenLoggerFactory.java index 9ea6c18bc412..27dc2ee30a66 100644 --- a/impl/maven-logging/src/main/java/org/apache/maven/slf4j/MavenLoggerFactory.java +++ b/impl/maven-logging/src/main/java/org/apache/maven/slf4j/MavenLoggerFactory.java @@ -28,7 +28,7 @@ * LogFactory for Maven which can create a simple logger or one which, if set, fails the build on a severity threshold. */ public class MavenLoggerFactory implements org.apache.maven.logging.api.LogLevelRecorder, ILoggerFactory { - DefaultLogLevelRecorder logLevelRecorder = null; + final DefaultLogLevelRecorder logLevelRecorder = new DefaultLogLevelRecorder(); final ConcurrentMap loggerMap = new ConcurrentHashMap<>(); public MavenLoggerFactory() { @@ -37,7 +37,7 @@ public MavenLoggerFactory() { @Override public boolean hasReachedMaxLevel() { - return logLevelRecorder != null && logLevelRecorder.metThreshold(); + return logLevelRecorder.metThreshold(); } @Override @@ -52,7 +52,7 @@ public Level getMaxLevelAllowed() { @Override public void setMaxLevelAllowed(Level level) { - this.logLevelRecorder = new DefaultLogLevelRecorder(level.name()); + this.logLevelRecorder.setMaxLevelAllowed(level); } /** * Return an appropriate {@link Logger} instance by name. @@ -62,12 +62,13 @@ public Logger getLogger(String name) { return loggerMap.computeIfAbsent(name, this::getNewLoggingInstance); } + @Override + public void reset() { + logLevelRecorder.reset(); + } + protected Logger getNewLoggingInstance(String name) { - if (logLevelRecorder == null) { - return new MavenSimpleLogger(name); - } else { - return new MavenFailOnSeverityLogger(name, logLevelRecorder); - } + return new MavenFailOnSeverityLogger(name, logLevelRecorder); } public void reconfigure() { @@ -78,5 +79,6 @@ public void reconfigure() { msl.configure(config.defaultLogLevel); } }); + logLevelRecorder.reset(); } } diff --git a/impl/maven-logging/src/test/java/org/apache/maven/slf4j/LogLevelRecorderTest.java b/impl/maven-logging/src/test/java/org/apache/maven/slf4j/LogLevelRecorderTest.java index 264be86f635b..c2573b066ce6 100644 --- a/impl/maven-logging/src/test/java/org/apache/maven/slf4j/LogLevelRecorderTest.java +++ b/impl/maven-logging/src/test/java/org/apache/maven/slf4j/LogLevelRecorderTest.java @@ -18,43 +18,19 @@ */ package org.apache.maven.slf4j; +import org.apache.maven.logging.api.LogLevelRecorder; import org.junit.jupiter.api.Test; import org.slf4j.event.Level; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; class LogLevelRecorderTest { @Test void createsLogLevelRecorder() { - DefaultLogLevelRecorder logLevelRecorder = new DefaultLogLevelRecorder("WARN"); + DefaultLogLevelRecorder logLevelRecorder = new DefaultLogLevelRecorder(); + logLevelRecorder.setMaxLevelAllowed(LogLevelRecorder.Level.WARN); logLevelRecorder.record(Level.ERROR); assertTrue(logLevelRecorder.metThreshold()); } - - @Test - void failsOnLowerThanWarn() { - assertThrows(IllegalArgumentException.class, () -> new DefaultLogLevelRecorder("INFO")); - } - - @Test - void createsLogLevelRecorderWithWarning() { - DefaultLogLevelRecorder logLevelRecorder = new DefaultLogLevelRecorder("WARNING"); - logLevelRecorder.record(Level.ERROR); - - assertTrue(logLevelRecorder.metThreshold()); - } - - @Test - void failsOnUnknownLogLevel() { - Throwable thrown = assertThrows(IllegalArgumentException.class, () -> new DefaultLogLevelRecorder("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")); - } } diff --git a/impl/maven-logging/src/test/java/org/apache/maven/slf4j/MavenLoggerFactoryTest.java b/impl/maven-logging/src/test/java/org/apache/maven/slf4j/MavenLoggerFactoryTest.java index 6ee870dc62cc..a6fb8cbc963d 100644 --- a/impl/maven-logging/src/test/java/org/apache/maven/slf4j/MavenLoggerFactoryTest.java +++ b/impl/maven-logging/src/test/java/org/apache/maven/slf4j/MavenLoggerFactoryTest.java @@ -18,6 +18,7 @@ */ package org.apache.maven.slf4j; +import org.apache.maven.logging.api.LogLevelRecorder; import org.junit.jupiter.api.Test; import org.slf4j.Logger; @@ -56,7 +57,7 @@ void loggerCachingWorks() { @Test void reportsWhenFailOnSeverityThresholdHasBeenHit() { MavenLoggerFactory mavenLoggerFactory = new MavenLoggerFactory(); - mavenLoggerFactory.logLevelRecorder = new DefaultLogLevelRecorder("ERROR"); + mavenLoggerFactory.logLevelRecorder.setMaxLevelAllowed(LogLevelRecorder.Level.ERROR); MavenFailOnSeverityLogger logger = (MavenFailOnSeverityLogger) mavenLoggerFactory.getLogger("Test"); assertFalse(mavenLoggerFactory.logLevelRecorder.metThreshold());