feat(logger): support messages with a throwable and parameters
ci/woodpecker/push/woodpecker Pipeline was successful
Details
ci/woodpecker/push/woodpecker Pipeline was successful
Details
This commit is contained in:
parent
ae263e15ea
commit
c6792c4a3b
|
@ -1,6 +1,7 @@
|
|||
package io.gitlab.jfronny.commons.logger;
|
||||
|
||||
import io.gitlab.jfronny.commons.StringFormatter;
|
||||
import io.gitlab.jfronny.commons.logger.impl.Formatter;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.MissingResourceException;
|
||||
|
@ -24,34 +25,24 @@ public interface CompactLogger extends SystemLoggerPlus {
|
|||
@Override
|
||||
default void log(Level level, ResourceBundle resourceBundle, String s, Throwable throwable) {
|
||||
if (!isLoggable(level)) return;
|
||||
s = getResourceStringOrMessage(resourceBundle, s);
|
||||
log(level, s, throwable);
|
||||
log(level, Formatter.getResourceStringOrMessage(resourceBundle, 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);
|
||||
}
|
||||
log(level, Formatter.format(resourceBundle, s, objects));
|
||||
}
|
||||
|
||||
@Override
|
||||
default void log(Level level, ResourceBundle bundle, String format, Throwable t, Object... params) {
|
||||
// Also in SystemLoggerPlus.java
|
||||
if (!isLoggable(level)) return;
|
||||
log(level, Formatter.format(bundle, format, params), t);
|
||||
}
|
||||
|
||||
@Deprecated(forRemoval = true)
|
||||
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();
|
||||
}
|
||||
return Formatter.getResourceStringOrMessage(bundle, msg);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package io.gitlab.jfronny.commons.logger;
|
||||
|
||||
|
||||
import io.gitlab.jfronny.commons.logger.impl.Formatter;
|
||||
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
|
@ -41,4 +43,14 @@ public class CompoundLogger implements SystemLoggerPlus {
|
|||
if (logger.isLoggable(level)) logger.log(level, resourceBundle, s, objects);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(Level level, ResourceBundle bundle, String format, Throwable t, Object... params) {
|
||||
for (System.Logger logger : loggers) {
|
||||
switch (logger) {
|
||||
case SystemLoggerPlus slp -> slp.log(level, bundle, format, t, params);
|
||||
case System.Logger sl -> sl.log(level, Formatter.format(bundle, format, params), t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package io.gitlab.jfronny.commons.logger;
|
||||
|
||||
import io.gitlab.jfronny.commons.logger.impl.Formatter;
|
||||
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
|
@ -36,4 +38,12 @@ public abstract class DelegateLogger implements SystemLoggerPlus {
|
|||
public void log(Level level, ResourceBundle resourceBundle, String s, Object... objects) {
|
||||
getDelegate().log(level, resourceBundle, s, objects);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(Level level, ResourceBundle resourceBundle, String format, Throwable t, Object... params) {
|
||||
switch (getDelegate()) {
|
||||
case SystemLoggerPlus slp -> slp.log(level, format, t, params);
|
||||
case System.Logger sl -> sl.log(level, Formatter.format(resourceBundle, format, params), t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,6 +61,7 @@ public class HotswapLoggerFinder extends LeveledLoggerFinder {
|
|||
ServiceLoader.load(LoggerConfiguration.class).forEach(LoggerConfiguration::configure);
|
||||
} catch (Throwable t) {
|
||||
System.err.println("Could not initialize LoggerConfiguration");
|
||||
//noinspection CallToPrintStackTrace
|
||||
t.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package io.gitlab.jfronny.commons.logger;
|
||||
|
||||
import io.gitlab.jfronny.commons.logger.impl.DelegateLoggerPlus;
|
||||
import io.gitlab.jfronny.commons.logger.impl.Formatter;
|
||||
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
public interface SystemLoggerPlus extends System.Logger {
|
||||
static SystemLoggerPlus forName(String name) {
|
||||
|
@ -11,6 +14,13 @@ public interface SystemLoggerPlus extends System.Logger {
|
|||
return DelegateLoggerPlus.get(logger);
|
||||
}
|
||||
|
||||
default void log(Level level, ResourceBundle bundle, String format, Throwable t, Object... params) {
|
||||
// Also in CompactLogger.java
|
||||
// Copied here for binary compatibility
|
||||
if (!isLoggable(level)) return;
|
||||
log(level, Formatter.format(bundle, format, params), t);
|
||||
}
|
||||
|
||||
default void trace(String msg, Object... params) {
|
||||
log(Level.TRACE, msg, params);
|
||||
}
|
||||
|
|
|
@ -33,4 +33,12 @@ public record DelegateLoggerPlus(System.Logger delegate) implements SystemLogger
|
|||
public void log(Level level, ResourceBundle bundle, String format, Object... params) {
|
||||
delegate.log(level, bundle, format, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(Level level, ResourceBundle bundle, String format, Throwable t, Object... params) {
|
||||
switch (delegate) {
|
||||
case SystemLoggerPlus slp -> slp.log(level, format, t, params);
|
||||
case System.Logger sl -> sl.log(level, Formatter.format(bundle, format, params), t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
package io.gitlab.jfronny.commons.logger.impl;
|
||||
|
||||
import io.gitlab.jfronny.commons.StringFormatter;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
public class Formatter {
|
||||
public static String format(ResourceBundle bundle, String format, Object... args) {
|
||||
format = getResourceStringOrMessage(bundle, format);
|
||||
if (args != null && args.length > 0) {
|
||||
String[] strings = new String[args.length];
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
strings[i] = StringFormatter.toString(args[i]);
|
||||
}
|
||||
return new MessageFormat(format).format(strings);
|
||||
} else {
|
||||
return format;
|
||||
}
|
||||
}
|
||||
|
||||
public 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();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue