package org.argeo.api.cms; import java.lang.System.Logger; 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 { SystemLogger 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 CmsLog getLog(Class clss) { return getLog(Objects.requireNonNull(clss).getName()); } static CmsLog getLog(String name) { SystemLogger logger; try { logger = new RealSystemLogger(name); } catch (NoSuchMethodError | NoClassDefFoundError e) {// Android logger = new FallBackSystemLogger(); } return new LoggerWrapper(logger); } }