blob: 95d35ed4fa28b15c4a4cd5f2e774bd4aafaca195 [file] [log] [blame]
/*
* 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);
}
}