[log] Implement level filtering

This commit is contained in:
Johannes Frohnmeyer 2022-09-15 14:36:37 +02:00
parent 435a61f888
commit 720a3a353c
Signed by: Johannes
GPG Key ID: E76429612C2929F4
5 changed files with 93 additions and 21 deletions

View File

@ -15,7 +15,7 @@ public record CommonsLogger(io.gitlab.jfronny.commons.log.Logger delegate) imple
@Override
public boolean isTraceEnabled() {
return false;
return true;
}
@Override
@ -45,7 +45,7 @@ public record CommonsLogger(io.gitlab.jfronny.commons.log.Logger delegate) imple
@Override
public boolean isTraceEnabled(Marker marker) {
return false;
return true;
}
@Override
@ -75,7 +75,7 @@ public record CommonsLogger(io.gitlab.jfronny.commons.log.Logger delegate) imple
@Override
public boolean isDebugEnabled() {
return false;
return true;
}
@Override
@ -105,7 +105,7 @@ public record CommonsLogger(io.gitlab.jfronny.commons.log.Logger delegate) imple
@Override
public boolean isDebugEnabled(Marker marker) {
return false;
return true;
}
@Override

View File

@ -1,6 +1,8 @@
package io.gitlab.jfronny.commons.log;
import org.jetbrains.annotations.*;
import org.jetbrains.annotations.Nullable;
import java.util.Objects;
public class DelegateLogger implements Logger {
public DelegateLogger() {
@ -12,6 +14,7 @@ public class DelegateLogger implements Logger {
}
protected Logger delegate;
protected Level level = Level.TRACE;
@Override
public @Nullable String getName() {
@ -20,101 +23,121 @@ public class DelegateLogger implements Logger {
@Override
public void trace(String msg) {
if (level.shouldOmit(Level.TRACE)) return;
delegate.trace(msg);
}
@Override
public void trace(String format, Object arg) {
if (level.shouldOmit(Level.TRACE)) return;
delegate.trace(format, arg);
}
@Override
public void trace(String format, Object... args) {
if (level.shouldOmit(Level.TRACE)) return;
delegate.trace(format, args);
}
@Override
public void trace(String msg, Throwable t) {
if (level.shouldOmit(Level.TRACE)) return;
delegate.trace(msg, t);
}
@Override
public void debug(String msg) {
if (level.shouldOmit(Level.DEBUG)) return;
delegate.debug(msg);
}
@Override
public void debug(String format, Object arg) {
if (level.shouldOmit(Level.DEBUG)) return;
delegate.debug(format, arg);
}
@Override
public void debug(String format, Object... args) {
if (level.shouldOmit(Level.DEBUG)) return;
delegate.debug(format, args);
}
@Override
public void debug(String msg, Throwable t) {
if (level.shouldOmit(Level.DEBUG)) return;
delegate.debug(msg, t);
}
@Override
public void info(String msg) {
if (level.shouldOmit(Level.INFO)) return;
delegate.info(msg);
}
@Override
public void info(String format, Object arg) {
if (level.shouldOmit(Level.INFO)) return;
delegate.info(format, arg);
}
@Override
public void info(String format, Object... args) {
if (level.shouldOmit(Level.INFO)) return;
delegate.info(format, args);
}
@Override
public void info(String msg, Throwable t) {
if (level.shouldOmit(Level.INFO)) return;
delegate.info(msg, t);
}
@Override
public void warn(String msg) {
if (level.shouldOmit(Level.WARN)) return;
delegate.warn(msg);
}
@Override
public void warn(String format, Object arg) {
if (level.shouldOmit(Level.WARN)) return;
delegate.warn(format, arg);
}
@Override
public void warn(String format, Object... args) {
if (level.shouldOmit(Level.WARN)) return;
delegate.warn(format, args);
}
@Override
public void warn(String msg, Throwable t) {
if (level.shouldOmit(Level.WARN)) return;
delegate.warn(msg, t);
}
@Override
public void error(String msg) {
if (level.shouldOmit(Level.ERROR)) return;
delegate.error(msg);
}
@Override
public void error(String format, Object arg) {
if (level.shouldOmit(Level.ERROR)) return;
delegate.error(format, arg);
}
@Override
public void error(String format, Object... args) {
if (level.shouldOmit(Level.ERROR)) return;
delegate.error(format, args);
}
@Override
public void error(String msg, Throwable t) {
if (level.shouldOmit(Level.ERROR)) return;
delegate.error(msg, t);
}
@ -136,4 +159,20 @@ public class DelegateLogger implements Logger {
public Logger getDelegate() {
return delegate;
}
/**
* Set the minimum level messages must have to not be discarded
* @param minLevel The new minimum
*/
public void setLevel(Level minLevel) {
this.level = Objects.requireNonNull(minLevel);
}
/**
* Get the minimum level messages must have to not be discarded
* @return the minimum
*/
public Level getLevel() {
return level;
}
}

View File

@ -1,7 +1,6 @@
package io.gitlab.jfronny.commons.log;
import io.gitlab.jfronny.commons.ref.*;
import io.gitlab.jfronny.commons.reflect.Reflect;
import org.jetbrains.annotations.*;
import java.util.*;
@ -9,7 +8,9 @@ import java.util.function.Function;
public class HotSwappingDelegateLogger extends DelegateLogger {
public static Function<String, Logger> LOGGER_BUILDER;
private static Level MINIMUM_LEVEL = Level.INFO;
private static final Set<HotSwappingDelegateLogger> KNOWN_LOGGERS = new WeakSet<>();
protected boolean levelChanged = false;
static {
resetStrategy();
@ -28,6 +29,15 @@ public class HotSwappingDelegateLogger extends DelegateLogger {
}
}
public static void updateLevel(Level minimumLevel) {
MINIMUM_LEVEL = Objects.requireNonNull(minimumLevel);
synchronized (KNOWN_LOGGERS) {
for (HotSwappingDelegateLogger ref : KNOWN_LOGGERS) {
ref.updateLevel();
}
}
}
public static HotSwappingDelegateLogger forName(@NotNull String name) {
return new HotSwappingDelegateLogger(name);
}
@ -36,8 +46,9 @@ public class HotSwappingDelegateLogger extends DelegateLogger {
private HotSwappingDelegateLogger(String name) {
this.name = name;
updateStrategy();
synchronized (KNOWN_LOGGERS) {
updateStrategy();
updateLevel();
KNOWN_LOGGERS.add(this);
}
}
@ -45,4 +56,16 @@ public class HotSwappingDelegateLogger extends DelegateLogger {
private void updateStrategy() {
delegate = LOGGER_BUILDER.apply(name);
}
private void updateLevel() {
if (!levelChanged) {
level = MINIMUM_LEVEL;
}
}
@Override
public void setLevel(Level minLevel) {
super.setLevel(minLevel);
this.levelChanged = true;
}
}

View File

@ -0,0 +1,24 @@
package io.gitlab.jfronny.commons.log;
public enum Level {
TRACE(OutputColors.WHITE),
DEBUG(OutputColors.WHITE),
INFO(OutputColors.BLUE),
WARN(OutputColors.RED),
ERROR(OutputColors.RED_BOLD);
public final String color;
Level(String color) {
this.color = color;
}
/**
* Whether a message with the provided level should be omitted if this is the minimum level
* @param level The level of the message
* @return whether it should be omitted
*/
public boolean shouldOmit(Level level) {
return this.compareTo(level) > 0;
}
}

View File

@ -89,18 +89,4 @@ public class StdoutLogger implements Logger {
sb.append(msg);
return sb.toString();
}
private enum Level {
TRACE(OutputColors.WHITE),
DEBUG(OutputColors.WHITE),
INFO(OutputColors.BLUE),
WARN(OutputColors.RED),
ERROR(OutputColors.RED_BOLD);
public final String color;
Level(String color) {
this.color = color;
}
}
}