Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<String, Level> 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<Level> 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();
Expand All @@ -67,16 +49,6 @@ 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;
}

public void record(org.slf4j.event.Level logLevel) {
Level level =
switch (logLevel) {
Expand All @@ -97,6 +69,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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, Logger> loggerMap = new ConcurrentHashMap<>();

public MavenLoggerFactory() {
Expand All @@ -37,7 +37,7 @@ public MavenLoggerFactory() {

@Override
public boolean hasReachedMaxLevel() {
return logLevelRecorder != null && logLevelRecorder.metThreshold();
return logLevelRecorder.metThreshold();
}

@Override
Expand All @@ -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.
Expand All @@ -63,11 +63,7 @@ public Logger getLogger(String name) {
}

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() {
Expand All @@ -78,5 +74,6 @@ public void reconfigure() {
msl.configure(config.defaultLogLevel);
}
});
logLevelRecorder.setMaxLevelAllowed(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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());
Expand Down
Loading