From ae3786244404433f609a71669eaf878a825717b9 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 7 Feb 2022 06:19:14 +0100 Subject: [PATCH] Decouple slf4j implementation from CMS API --- dep/org.argeo.dep.cms.base/pom.xml | 16 +- org.argeo.cms.tp/bnd.bnd | 7 +- .../src/org/apache/commons/logging/Log.java | 2 +- .../src/org/slf4j/impl/ArgeoLogger.java | 5 +- .../org/slf4j/impl/StaticLoggerBinder.java | 3 +- .../org/slf4j/impl/SystemLoggingAdapter.java | 203 ++++++++++++++++++ 6 files changed, 217 insertions(+), 19 deletions(-) create mode 100644 org.argeo.cms.tp/src/org/slf4j/impl/SystemLoggingAdapter.java diff --git a/dep/org.argeo.dep.cms.base/pom.xml b/dep/org.argeo.dep.cms.base/pom.xml index 80ad7f793..3586a0a4f 100644 --- a/dep/org.argeo.dep.cms.base/pom.xml +++ b/dep/org.argeo.dep.cms.base/pom.xml @@ -77,10 +77,10 @@ - - - - + + org.argeo.tp.misc + org.slf4j.commons.logging + @@ -105,10 +105,10 @@ org.argeo.tp.bouncycastle bcpkix - - - - + + org.argeo.tp.bouncycastle + bcpg + diff --git a/org.argeo.cms.tp/bnd.bnd b/org.argeo.cms.tp/bnd.bnd index 23eb6d78d..37061df59 100644 --- a/org.argeo.cms.tp/bnd.bnd +++ b/org.argeo.cms.tp/bnd.bnd @@ -1,6 +1,3 @@ -Export-Package: \ -org.apache.commons.logging;version=1.2.555,\ -* +Export-Package: org.slf4j.impl -Import-Package: \ -*;resolution:=optional +Import-Package: * diff --git a/org.argeo.cms.tp/src/org/apache/commons/logging/Log.java b/org.argeo.cms.tp/src/org/apache/commons/logging/Log.java index bf9a94c4b..eacce67b9 100644 --- a/org.argeo.cms.tp/src/org/apache/commons/logging/Log.java +++ b/org.argeo.cms.tp/src/org/apache/commons/logging/Log.java @@ -2,6 +2,6 @@ package org.apache.commons.logging; /** An Apache logging facade. */ @Deprecated -public interface Log extends org.argeo.api.cms.CmsLog { +public interface Log extends org.slf4j.impl.SystemLoggingAdapter { } diff --git a/org.argeo.cms.tp/src/org/slf4j/impl/ArgeoLogger.java b/org.argeo.cms.tp/src/org/slf4j/impl/ArgeoLogger.java index 67b236a8e..5c4889aed 100644 --- a/org.argeo.cms.tp/src/org/slf4j/impl/ArgeoLogger.java +++ b/org.argeo.cms.tp/src/org/slf4j/impl/ArgeoLogger.java @@ -1,13 +1,12 @@ package org.slf4j.impl; -import org.argeo.api.cms.CmsLog; import org.slf4j.helpers.MarkerIgnoringBase; class ArgeoLogger extends MarkerIgnoringBase { private static final long serialVersionUID = -7719157836932627307L; - private final CmsLog log; + private final SystemLoggingAdapter log; - protected ArgeoLogger(String name, CmsLog log) { + protected ArgeoLogger(String name, SystemLoggingAdapter log) { this.name = name; this.log = log; } diff --git a/org.argeo.cms.tp/src/org/slf4j/impl/StaticLoggerBinder.java b/org.argeo.cms.tp/src/org/slf4j/impl/StaticLoggerBinder.java index 224b99bce..8c5b3ad8e 100644 --- a/org.argeo.cms.tp/src/org/slf4j/impl/StaticLoggerBinder.java +++ b/org.argeo.cms.tp/src/org/slf4j/impl/StaticLoggerBinder.java @@ -1,6 +1,5 @@ package org.slf4j.impl; -import org.argeo.api.cms.CmsLog; import org.slf4j.ILoggerFactory; import org.slf4j.spi.LoggerFactoryBinder; @@ -33,7 +32,7 @@ public class StaticLoggerBinder implements LoggerFactoryBinder { @Override public org.slf4j.Logger getLogger(String name) { - CmsLog logger = CmsLog.getLog(name); + SystemLoggingAdapter logger = SystemLoggingAdapter.getLog(name); return new ArgeoLogger(name, logger); } diff --git a/org.argeo.cms.tp/src/org/slf4j/impl/SystemLoggingAdapter.java b/org.argeo.cms.tp/src/org/slf4j/impl/SystemLoggingAdapter.java new file mode 100644 index 000000000..7a6c86555 --- /dev/null +++ b/org.argeo.cms.tp/src/org/slf4j/impl/SystemLoggingAdapter.java @@ -0,0 +1,203 @@ +package org.slf4j.impl; + +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.Objects; +import java.util.function.Supplier; + +/** + * A Commons Logging / SLF4J style logging utilities wrapping a standard Java + * platform {@link Logger}. + */ +public interface SystemLoggingAdapter { + Logger getLogger(); + + default boolean isDebugEnabled() { + return getLogger().isLoggable(Level.DEBUG); + } + + default boolean isErrorEnabled() { + return getLogger().isLoggable(Level.ERROR); + } + + default boolean isInfoEnabled() { + return getLogger().isLoggable(Level.INFO); + } + + default boolean isTraceEnabled() { + return getLogger().isLoggable(Level.TRACE); + } + + default boolean isWarnEnabled() { + return getLogger().isLoggable(Level.WARNING); + } + + /* + * TRACE + */ + + default void trace(String message) { + getLogger().log(Level.TRACE, message); + } + + default void trace(Supplier message) { + getLogger().log(Level.TRACE, message); + } + + default void trace(Object message) { + getLogger().log(Level.TRACE, Objects.requireNonNull(message)); + } + + default void trace(String message, Throwable t) { + getLogger().log(Level.TRACE, message, t); + } + + default void trace(Object message, Throwable t) { + trace(Objects.requireNonNull(message).toString(), t); + } + + default void trace(String format, Object... arguments) { + getLogger().log(Level.TRACE, format, arguments); + } + + /* + * DEBUG + */ + + default void debug(String message) { + getLogger().log(Level.DEBUG, message); + } + + default void debug(Supplier message) { + getLogger().log(Level.DEBUG, message); + } + + default void debug(Object message) { + getLogger().log(Level.DEBUG, message); + } + + default void debug(String message, Throwable t) { + getLogger().log(Level.DEBUG, message, t); + } + + default void debug(Object message, Throwable t) { + debug(Objects.requireNonNull(message).toString(), t); + } + + default void debug(String format, Object... arguments) { + getLogger().log(Level.DEBUG, format, arguments); + } + + /* + * INFO + */ + + default void info(String message) { + getLogger().log(Level.INFO, message); + } + + default void info(Supplier message) { + getLogger().log(Level.INFO, message); + } + + default void info(Object message) { + getLogger().log(Level.INFO, message); + } + + default void info(String message, Throwable t) { + getLogger().log(Level.INFO, message, t); + } + + default void info(Object message, Throwable t) { + info(Objects.requireNonNull(message).toString(), t); + } + + default void info(String format, Object... arguments) { + getLogger().log(Level.INFO, format, arguments); + } + + /* + * WARN + */ + + default void warn(String message) { + getLogger().log(Level.WARNING, message); + } + + default void warn(Supplier message) { + getLogger().log(Level.WARNING, message); + } + + default void warn(Object message) { + getLogger().log(Level.WARNING, message); + } + + default void warn(String message, Throwable t) { + getLogger().log(Level.WARNING, message, t); + } + + default void warn(Object message, Throwable t) { + warn(Objects.requireNonNull(message).toString(), t); + } + + default void warn(String format, Object... arguments) { + getLogger().log(Level.WARNING, format, arguments); + } + + /* + * ERROR + */ + + default void error(String message) { + getLogger().log(Level.ERROR, message); + } + + default void error(Supplier message) { + getLogger().log(Level.ERROR, message); + } + + default void error(Object message) { + getLogger().log(Level.ERROR, message); + } + + default void error(String message, Throwable t) { + getLogger().log(Level.ERROR, message, t); + } + + default void error(Object message, Throwable t) { + error(Objects.requireNonNull(message).toString(), t); + } + + default void error(String format, Object... arguments) { + getLogger().log(Level.ERROR, format, arguments); + } + + /* + * STATIC UTILITIES + */ + + static SystemLoggingAdapter getLog(Class clss) { + return getLog(Objects.requireNonNull(clss).getName()); + } + + static SystemLoggingAdapter getLog(String name) { + Logger logger = System.getLogger(Objects.requireNonNull(name)); + return new LoggerWrapper(logger); + } + + /** A trivial implementation wrapping a platform logger. */ + static class LoggerWrapper implements SystemLoggingAdapter { + private final Logger logger; + + LoggerWrapper(Logger logger) { + this.logger = logger; + } + + @Override + public Logger getLogger() { + return logger; + } + + } + +} -- 2.30.2