[log] Implement level filtering
This commit is contained in:
parent
435a61f888
commit
720a3a353c
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue