| /* | |
| * Copyright (c) 2015, 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 jdk.internal.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.PlatformLogger; | |
| /** | |
| * An implementation of {@link System.Logger System.Logger} | |
| * that redirects all calls to a wrapped instance of {@link | |
| * System.Logger System.Logger} | |
| * | |
| * @param <L> Type of the wrapped Logger: {@code Logger} or | |
| * an extension of that interface. | |
| * | |
| */ | |
| abstract class AbstractLoggerWrapper<L extends Logger> | |
| implements Logger, PlatformLogger.Bridge, PlatformLogger.ConfigurableBridge { | |
| AbstractLoggerWrapper() { } | |
| abstract L wrapped(); | |
| abstract PlatformLogger.Bridge 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<String> 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<String> 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 PlatformLogger.Bridge | |
| // --------------------------------------------------------- | |
| @Override | |
| public boolean isLoggable(PlatformLogger.Level level) { | |
| final PlatformLogger.Bridge platformProxy = platformProxy(); | |
| if (platformProxy == null) return isLoggable(level.systemLevel()); | |
| else return platformProxy.isLoggable(level); | |
| } | |
| @Override | |
| public boolean isEnabled() { | |
| final PlatformLogger.Bridge platformProxy = platformProxy(); | |
| return platformProxy == null || platformProxy.isEnabled(); | |
| } | |
| @Override | |
| public void log(PlatformLogger.Level level, String msg) { | |
| final PlatformLogger.Bridge 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 PlatformLogger.Bridge 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 PlatformLogger.Bridge 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<String> msgSupplier) { | |
| final PlatformLogger.Bridge 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<String> msgSupplier) { | |
| final PlatformLogger.Bridge 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 PlatformLogger.Bridge 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<String> msgSupplier) { | |
| final PlatformLogger.Bridge 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 PlatformLogger.Bridge 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 PlatformLogger.Bridge 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<String> msgSupplier) { | |
| final PlatformLogger.Bridge 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 PlatformLogger.Bridge 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, bundle, 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 PlatformLogger.Bridge 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, bundle, 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 PlatformLogger.Bridge 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 PlatformLogger.Bridge platformProxy = platformProxy(); | |
| if (platformProxy == null) { | |
| wrapped().log(level.systemLevel(), bundle, msg, params); | |
| } else { | |
| platformProxy.logrb(level, bundle, msg, params); | |
| } | |
| } | |
| @Override | |
| public LoggerConfiguration getLoggerConfiguration() { | |
| final PlatformLogger.Bridge platformProxy = platformProxy(); | |
| return platformProxy == null ? null | |
| : PlatformLogger.ConfigurableBridge | |
| .getLoggerConfiguration(platformProxy); | |
| } | |
| } |