/* * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package sun.util.logger; import java.util.ResourceBundle; import java.util.function.Supplier; import java.lang.System.Logger; import java.lang.System.Logger.Level; import sun.util.logging.ConfigurableLoggerBridge; import sun.util.logging.PlatformLogger; import sun.util.logging.PlatformLoggerBridge; /** * An implementation of {@link System.Logger System.Logger} * that redirects all calls to a wrapped instance of {@link * System.Logger System.Logger} * * @param Type of the wrapped Logger: {@code Logger} or * an extension of that interface. * @since 1.9 * */ abstract class AbstractLoggerWrapper implements Logger, PlatformLoggerBridge, ConfigurableLoggerBridge { AbstractLoggerWrapper() { } abstract L wrapped(); abstract PlatformLoggerBridge platformProxy(); L getWrapped() { return wrapped(); } @Override public final String getName() { return wrapped().getName(); } // ----------------------------------------------------------------- // Generic methods taking a Level as parameter // ----------------------------------------------------------------- @Override public boolean isLoggable(Level level) { return wrapped().isLoggable(level); } @Override public void log(Level level, String msg) { wrapped().log(level, msg); } @Override public void log(Level level, Supplier msgSupplier) { wrapped().log(level, msgSupplier); } @Override public void log(Level level, Object obj) { wrapped().log(level, obj); } @Override public void log(Level level, String msg, Throwable thrown) { wrapped().log(level, msg, thrown); } @Override public void log(Level level, Supplier msgSupplier, Throwable thrown) { wrapped().log(level, msgSupplier, thrown); } @Override public void log(Level level, String format, Object... params) { wrapped().log(level, format, params); } @Override public void log(Level level, ResourceBundle bundle, String key, Throwable thrown) { wrapped().log(level, bundle, key, thrown); } @Override public void log(Level level, ResourceBundle bundle, String format, Object... params) { wrapped().log(level, bundle, format, params); } // --------------------------------------------------------- // Methods from PlatformLoggerBridge // --------------------------------------------------------- @Override public boolean isLoggable(PlatformLogger.Level level) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) return isLoggable(level.systemLevel()); else return platformProxy.isLoggable(level); } @Override public boolean isEnabled() { final PlatformLoggerBridge platformProxy = platformProxy(); return platformProxy == null || platformProxy.isEnabled(); } @Override public void log(PlatformLogger.Level level, String msg) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { wrapped().log(level.systemLevel(), msg); } else { platformProxy.log(level, msg); } } @Override public void log(PlatformLogger.Level level, String msg, Throwable thrown) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { wrapped().log(level.systemLevel(), msg, thrown); } else { platformProxy.log(level, msg, thrown); } } @Override public void log(PlatformLogger.Level level, String msg, Object... params) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { wrapped().log(level.systemLevel(), msg, params); } else { platformProxy.log(level, msg, params); } } @Override public void log(PlatformLogger.Level level, Supplier msgSupplier) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { wrapped().log(level.systemLevel(),msgSupplier); } else { platformProxy.log(level,msgSupplier); } } @Override public void log(PlatformLogger.Level level, Throwable thrown, Supplier msgSupplier) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { wrapped().log(level.systemLevel(), msgSupplier, thrown); } else { platformProxy.log(level, thrown, msgSupplier); } } @Override public void logp(PlatformLogger.Level level, String sourceClass, String sourceMethod, String msg) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { if (sourceClass==null && sourceMethod==null) { // best effort wrapped().log(level.systemLevel(), msg); } else { Level systemLevel = level.systemLevel(); Logger wrapped = wrapped(); if (wrapped.isLoggable(systemLevel)) { sourceClass = sourceClass == null ? "" : sourceClass; sourceMethod = sourceMethod == null ? "" : sourceMethod; msg = msg == null ? "" : msg; wrapped.log(systemLevel, String.format("[%s %s] %s", sourceClass, sourceMethod, msg)); } } } else { platformProxy.logp(level, sourceClass, sourceMethod, msg); } } @Override public void logp(PlatformLogger.Level level, String sourceClass, String sourceMethod, Supplier msgSupplier) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { // best effort if (sourceClass==null && sourceMethod==null) { wrapped().log(level.systemLevel(), msgSupplier); } else { Level systemLevel = level.systemLevel(); Logger wrapped = wrapped(); if (wrapped.isLoggable(systemLevel)) { final String sClass = sourceClass == null ? "" : sourceClass; final String sMethod = sourceMethod == null ? "" : sourceMethod; wrapped.log(systemLevel, () -> String.format("[%s %s] %s", sClass, sMethod, msgSupplier.get())); } } } else { platformProxy.logp(level, sourceClass, sourceMethod, msgSupplier); } } @Override public void logp(PlatformLogger.Level level, String sourceClass, String sourceMethod, String msg, Object... params) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { // best effort if (sourceClass==null && sourceMethod==null) { wrapped().log(level.systemLevel(), msg, params); } else { Level systemLevel = level.systemLevel(); Logger wrapped = wrapped(); if (wrapped.isLoggable(systemLevel)) { sourceClass = sourceClass == null ? "" : sourceClass; sourceMethod = sourceMethod == null ? "" : sourceMethod; msg = msg == null ? "" : msg; wrapped.log(systemLevel, String.format("[%s %s] %s", sourceClass, sourceMethod, msg), params); } } } else { platformProxy.logp(level, sourceClass, sourceMethod, msg, params); } } @Override public void logp(PlatformLogger.Level level, String sourceClass, String sourceMethod, String msg, Throwable thrown) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { // best effort if (sourceClass==null && sourceMethod==null) { wrapped().log(level.systemLevel(), msg, thrown); } else { Level systemLevel = level.systemLevel(); Logger wrapped = wrapped(); if (wrapped.isLoggable(systemLevel)) { sourceClass = sourceClass == null ? "" : sourceClass; sourceMethod = sourceMethod == null ? "" : sourceMethod; msg = msg == null ? "" : msg; wrapped.log(systemLevel, String.format("[%s %s] %s", sourceClass, sourceMethod, msg), thrown); } } } else { platformProxy.logp(level, sourceClass, sourceMethod, msg, thrown); } } @Override public void logp(PlatformLogger.Level level, String sourceClass, String sourceMethod, Throwable thrown, Supplier msgSupplier) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { // best effort if (sourceClass==null && sourceMethod==null) { wrapped().log(level.systemLevel(), msgSupplier, thrown); } else { Level systemLevel = level.systemLevel(); Logger wrapped = wrapped(); if (wrapped.isLoggable(systemLevel)) { final String sClass = sourceClass == null ? "" : sourceClass; final String sMethod = sourceMethod == null ? "" : sourceMethod; wrapped.log(systemLevel, () -> String.format("[%s %s] %s", sClass, sMethod, msgSupplier.get()), thrown); } } } else { platformProxy.logp(level, sourceClass, sourceMethod, thrown, msgSupplier); } } @Override public void logrb(PlatformLogger.Level level, String sourceClass, String sourceMethod, ResourceBundle bundle, String msg, Object... params) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { // best effort if (bundle != null || sourceClass == null && sourceMethod == null) { wrapped().log(level.systemLevel(), bundle, msg, params); } else { Level systemLevel = level.systemLevel(); Logger wrapped = wrapped(); if (wrapped.isLoggable(systemLevel)) { sourceClass = sourceClass == null ? "" : sourceClass; sourceMethod = sourceMethod == null ? "" : sourceMethod; msg = msg == null ? "" : msg; wrapped.log(systemLevel, String.format("[%s %s] %s", sourceClass, sourceMethod, msg), params); } } } else { platformProxy.logrb(level, sourceClass, sourceMethod, bundle, msg, params); } } @Override public void logrb(PlatformLogger.Level level, String sourceClass, String sourceMethod, ResourceBundle bundle, String msg, Throwable thrown) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { // best effort if (bundle != null || sourceClass == null && sourceMethod == null) { wrapped().log(level.systemLevel(), bundle, msg, thrown); } else { Level systemLevel = level.systemLevel(); Logger wrapped = wrapped(); if (wrapped.isLoggable(systemLevel)) { sourceClass = sourceClass == null ? "" : sourceClass; sourceMethod = sourceMethod == null ? "" : sourceMethod; msg = msg == null ? "" : msg; wrapped.log(systemLevel, String.format("[%s %s] %s", sourceClass, sourceMethod, msg), thrown); } } } else { platformProxy.logrb(level, sourceClass, sourceMethod, bundle, msg, thrown); } } @Override public void logrb(PlatformLogger.Level level, ResourceBundle bundle, String msg, Throwable thrown) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { wrapped().log(level.systemLevel(), bundle, msg, thrown); } else { platformProxy.logrb(level, bundle, msg, thrown); } } @Override public void logrb(PlatformLogger.Level level, ResourceBundle bundle, String msg, Object... params) { final PlatformLoggerBridge platformProxy = platformProxy(); if (platformProxy == null) { wrapped().log(level.systemLevel(), bundle, msg, params); } else { platformProxy.logrb(level, bundle, msg, params); } } @Override public LoggerConfiguration getLoggerConfiguration() { final PlatformLoggerBridge platformProxy = platformProxy(); return platformProxy == null ? null : ConfigurableLoggerBridge.getLoggerConfiguration(platformProxy); } }