java-commons/commons-logger/src/main/java/io/gitlab/jfronny/commons/logger/CompactLogger.java

58 lines
2.0 KiB
Java

package io.gitlab.jfronny.commons.logger;
import io.gitlab.jfronny.commons.StringFormatter;
import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public interface CompactLogger extends SystemLoggerPlus {
Level getLevel();
void log(Level level, String message);
default void log(Level level, String message, Throwable throwable) {
if (!isLoggable(level)) return;
log(level, message + System.lineSeparator() + StringFormatter.toString(throwable));
}
@Override
default boolean isLoggable(Level level) {
if (level == Level.ALL) return true;
if (level == Level.OFF) return false;
return level.getSeverity() >= getLevel().getSeverity();
}
@Override
default void log(Level level, ResourceBundle resourceBundle, String s, Throwable throwable) {
if (!isLoggable(level)) return;
s = getResourceStringOrMessage(resourceBundle, s);
log(level, s, throwable);
}
@Override
default void log(Level level, ResourceBundle resourceBundle, String s, Object... objects) {
if (!isLoggable(level)) return;
s = getResourceStringOrMessage(resourceBundle, s);
if (objects != null && objects.length > 0) {
String[] strings = new String[objects.length];
for (int i = 0; i < objects.length; i++) {
strings[i] = StringFormatter.toString(objects[i]);
}
log(level, new MessageFormat(s).format(strings));
} else {
log(level, s);
}
}
private static String getResourceStringOrMessage(ResourceBundle bundle, String msg) {
// This method was taken from SLF4J and modified slightly
if (bundle == null || msg == null) return msg;
try {
return bundle.getString(msg);
} catch (MissingResourceException ex) {
return msg;
} catch (ClassCastException ex) {
return bundle.getObject(msg).toString();
}
}
}