+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;
+ }
+
+ }
+
+}