| /* |
| * 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); |
| } |
| |
| } |