]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.api.cms/src/org/argeo/api/cms/CmsLog.java
Fallback mechanism in case System.getLogger is not supported (e.g.
[lgpl/argeo-commons.git] / org.argeo.api.cms / src / org / argeo / api / cms / CmsLog.java
index 206cfd64995d12b9db0a7afdab96d797473c61b5..1c88441f77a5b2febaa1bf43840760458f5f780f 100644 (file)
@@ -1,15 +1,17 @@
 package org.argeo.api.cms;
 
 import java.lang.System.Logger;
-import java.lang.System.Logger.Level;
 import java.util.Objects;
+import java.util.function.Supplier;
+
+import org.argeo.api.cms.SystemLogger.Level;
 
 /**
  * A Commons Logging / SLF4J style logging utilities wrapping a standard Java
  * platform {@link Logger}.
  */
 public interface CmsLog {
-       Logger getLogger();
+       SystemLogger getLogger();
 
        default boolean isDebugEnabled() {
                return getLogger().isLoggable(Level.DEBUG);
@@ -39,6 +41,10 @@ public interface CmsLog {
                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));
        }
@@ -63,6 +69,10 @@ public interface CmsLog {
                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);
        }
@@ -87,6 +97,10 @@ public interface CmsLog {
                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);
        }
@@ -111,6 +125,10 @@ public interface CmsLog {
                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);
        }
@@ -135,6 +153,10 @@ public interface CmsLog {
                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);
        }
@@ -160,23 +182,13 @@ public interface CmsLog {
        }
 
        static CmsLog 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 CmsLog {
-               private final Logger logger;
-
-               LoggerWrapper(Logger logger) {
-                       this.logger = logger;
-               }
-
-               @Override
-               public Logger getLogger() {
-                       return logger;
+               SystemLogger logger;
+               try {
+                       logger = new RealSystemLogger(name);
+               } catch (NoSuchMethodError | NoClassDefFoundError e) {// Android
+                       logger = new FallBackSystemLogger();
                }
-
+               return new LoggerWrapper(logger);
        }
 
 }