From 720a3a353cec3b3410a1e4eabaa3a514ffa275db Mon Sep 17 00:00:00 2001 From: JFronny Date: Thu, 15 Sep 2022 14:36:37 +0200 Subject: [PATCH] [log] Implement level filtering --- .../jfronny/commons/log/CommonsLogger.java | 8 ++-- .../jfronny/commons/log/DelegateLogger.java | 41 ++++++++++++++++++- .../log/HotSwappingDelegateLogger.java | 27 +++++++++++- .../io/gitlab/jfronny/commons/log/Level.java | 24 +++++++++++ .../jfronny/commons/log/StdoutLogger.java | 14 ------- 5 files changed, 93 insertions(+), 21 deletions(-) create mode 100644 src/main/java/io/gitlab/jfronny/commons/log/Level.java diff --git a/commons-slf4j/src/main/java/io/gitlab/jfronny/commons/log/CommonsLogger.java b/commons-slf4j/src/main/java/io/gitlab/jfronny/commons/log/CommonsLogger.java index 49ed032..a163f99 100644 --- a/commons-slf4j/src/main/java/io/gitlab/jfronny/commons/log/CommonsLogger.java +++ b/commons-slf4j/src/main/java/io/gitlab/jfronny/commons/log/CommonsLogger.java @@ -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 diff --git a/src/main/java/io/gitlab/jfronny/commons/log/DelegateLogger.java b/src/main/java/io/gitlab/jfronny/commons/log/DelegateLogger.java index f3387bd..89ea42b 100644 --- a/src/main/java/io/gitlab/jfronny/commons/log/DelegateLogger.java +++ b/src/main/java/io/gitlab/jfronny/commons/log/DelegateLogger.java @@ -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; + } } diff --git a/src/main/java/io/gitlab/jfronny/commons/log/HotSwappingDelegateLogger.java b/src/main/java/io/gitlab/jfronny/commons/log/HotSwappingDelegateLogger.java index 0f398b2..aba444a 100644 --- a/src/main/java/io/gitlab/jfronny/commons/log/HotSwappingDelegateLogger.java +++ b/src/main/java/io/gitlab/jfronny/commons/log/HotSwappingDelegateLogger.java @@ -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 LOGGER_BUILDER; + private static Level MINIMUM_LEVEL = Level.INFO; private static final Set 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; + } } diff --git a/src/main/java/io/gitlab/jfronny/commons/log/Level.java b/src/main/java/io/gitlab/jfronny/commons/log/Level.java new file mode 100644 index 0000000..f1ec8b3 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/commons/log/Level.java @@ -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; + } +} diff --git a/src/main/java/io/gitlab/jfronny/commons/log/StdoutLogger.java b/src/main/java/io/gitlab/jfronny/commons/log/StdoutLogger.java index 4a963a4..3a1eee8 100644 --- a/src/main/java/io/gitlab/jfronny/commons/log/StdoutLogger.java +++ b/src/main/java/io/gitlab/jfronny/commons/log/StdoutLogger.java @@ -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; - } - } }