Decouple slf4j implementation from CMS API
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 7 Feb 2022 05:19:14 +0000 (06:19 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 7 Feb 2022 05:19:14 +0000 (06:19 +0100)
dep/org.argeo.dep.cms.base/pom.xml
org.argeo.cms.tp/bnd.bnd
org.argeo.cms.tp/src/org/apache/commons/logging/Log.java
org.argeo.cms.tp/src/org/slf4j/impl/ArgeoLogger.java
org.argeo.cms.tp/src/org/slf4j/impl/StaticLoggerBinder.java
org.argeo.cms.tp/src/org/slf4j/impl/SystemLoggingAdapter.java [new file with mode: 0644]

index 80ad7f793d70bc2d55f228135c914afd2d93bc40..3586a0a4f179261f379bb86398e2e208bf9c6a8c 100644 (file)
                <!-- <groupId>org.argeo.tp.misc</groupId> -->
                <!-- <artifactId>slf4j.osgi</artifactId> -->
                <!-- </dependency> -->
-               <!-- <dependency> -->
-               <!-- <groupId>org.argeo.tp.misc</groupId> -->
-               <!-- <artifactId>org.slf4j.commons.logging</artifactId> -->
-               <!-- </dependency> -->
+               <dependency>
+                       <groupId>org.argeo.tp.misc</groupId>
+                       <artifactId>org.slf4j.commons.logging</artifactId>
+               </dependency>
 
                <!-- OSGi annotations -->
                <!-- <dependency> -->
                        <groupId>org.argeo.tp.bouncycastle</groupId>
                        <artifactId>bcpkix</artifactId>
                </dependency>
-               <!-- <dependency> -->
-               <!-- <groupId>org.argeo.tp.bouncycastle</groupId> -->
-               <!-- <artifactId>bcpg</artifactId> -->
-               <!-- </dependency> -->
+               <dependency>
+                       <groupId>org.argeo.tp.bouncycastle</groupId>
+                       <artifactId>bcpg</artifactId>
+               </dependency>
 
                <!-- Apache Commons -->
                <dependency>
index 23eb6d78de5e59f69d82213998c84ade7b2c54b0..37061df59140699ff5088b08c1579ee582ab0647 100644 (file)
@@ -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: *
index bf9a94c4b84aabe652e10339afc97eef8f9fdd42..eacce67b9e514c219708916541c40803162b31fa 100644 (file)
@@ -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 {
 
 }
index 67b236a8e02b3318c91ed62bc6b4e0b74b16b910..5c4889aedc8e57e606484519a34e84ca6c630b98 100644 (file)
@@ -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;
        }
index 224b99bcea5a0c7e9258be2e1c4bb4519f7d5899..8c5b3ad8ec9f888e391d0c050a017b5ddf25d5b5 100644 (file)
@@ -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 (file)
index 0000000..7a6c865
--- /dev/null
@@ -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<String> 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<String> 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<String> 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<String> 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<String> 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;
+               }
+
+       }
+
+}