< prev index next >
src/java.base/share/classes/jdk/internal/logger/SimpleConsoleLogger.java
Print this page
*** 1,7 ****
/*
! * 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
--- 1,7 ----
/*
! * Copyright (c) 2015, 2016, 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
*** 34,43 ****
--- 34,44 ----
import java.time.ZonedDateTime;
import java.util.Optional;
import java.util.ResourceBundle;
import java.util.function.Function;
import java.lang.System.Logger;
+ import java.util.PropertyPermission;
import java.util.function.Predicate;
import java.util.function.Supplier;
import sun.util.logging.PlatformLogger;
import sun.util.logging.PlatformLogger.ConfigurableBridge.LoggerConfiguration;
*** 47,68 ****
* JUL is not present and no DefaultLoggerFinder is installed.
*/
public class SimpleConsoleLogger extends LoggerConfiguration
implements Logger, PlatformLogger.Bridge, PlatformLogger.ConfigurableBridge {
! static final PlatformLogger.Level DEFAULT_LEVEL = PlatformLogger.Level.INFO;
final String name;
volatile PlatformLogger.Level level;
final boolean usePlatformLevel;
SimpleConsoleLogger(String name, boolean usePlatformLevel) {
this.name = name;
this.usePlatformLevel = usePlatformLevel;
}
@Override
! public String getName() {
return name;
}
private Enum<?> logLevel(PlatformLogger.Level level) {
return usePlatformLevel ? level : level.systemLevel();
--- 48,93 ----
* JUL is not present and no DefaultLoggerFinder is installed.
*/
public class SimpleConsoleLogger extends LoggerConfiguration
implements Logger, PlatformLogger.Bridge, PlatformLogger.ConfigurableBridge {
! static final Level DEFAULT_LEVEL = getDefaultLevel();
! static final PlatformLogger.Level DEFAULT_PLATFORM_LEVEL =
! PlatformLogger.toPlatformLevel(DEFAULT_LEVEL);
!
! static Level getDefaultLevel() {
! String levelName = AccessController.doPrivileged(new PrivilegedAction<String>() {
! @Override
! public String run() {
! return System.getProperty("jdk.system.logger.level", "INFO");
! }
! });
! try {
! return Level.valueOf(levelName);
! } catch (IllegalArgumentException iae) {
! return Level.INFO;
! }
! }
final String name;
volatile PlatformLogger.Level level;
final boolean usePlatformLevel;
SimpleConsoleLogger(String name, boolean usePlatformLevel) {
this.name = name;
this.usePlatformLevel = usePlatformLevel;
}
+ String defaultFormatString() {
+ return Formatting.defaultFormatString;
+ }
+
+ PlatformLogger.Level defaultLevel() {
+ return DEFAULT_PLATFORM_LEVEL;
+ }
+
@Override
! public final String getName() {
return name;
}
private Enum<?> logLevel(PlatformLogger.Level level) {
return usePlatformLevel ? level : level.systemLevel();
*** 75,100 ****
// ---------------------------------------------------
// From Logger
// ---------------------------------------------------
@Override
! public boolean isLoggable(Level level) {
return isLoggable(PlatformLogger.toPlatformLevel(level));
}
@Override
! public void log(Level level, ResourceBundle bundle, String key, Throwable thrown) {
if (isLoggable(level)) {
if (bundle != null) {
key = bundle.getString(key);
}
publish(getCallerInfo(), logLevel(level), key, thrown);
}
}
@Override
! public void log(Level level, ResourceBundle bundle, String format, Object... params) {
if (isLoggable(level)) {
if (bundle != null) {
format = bundle.getString(format);
}
publish(getCallerInfo(), logLevel(level), format, params);
--- 100,125 ----
// ---------------------------------------------------
// From Logger
// ---------------------------------------------------
@Override
! public final boolean isLoggable(Level level) {
return isLoggable(PlatformLogger.toPlatformLevel(level));
}
@Override
! public final void log(Level level, ResourceBundle bundle, String key, Throwable thrown) {
if (isLoggable(level)) {
if (bundle != null) {
key = bundle.getString(key);
}
publish(getCallerInfo(), logLevel(level), key, thrown);
}
}
@Override
! public final void log(Level level, ResourceBundle bundle, String format, Object... params) {
if (isLoggable(level)) {
if (bundle != null) {
format = bundle.getString(format);
}
publish(getCallerInfo(), logLevel(level), format, params);
*** 104,162 ****
// ---------------------------------------------------
// From PlatformLogger.Bridge
// ---------------------------------------------------
@Override
! public boolean isLoggable(PlatformLogger.Level level) {
final PlatformLogger.Level effectiveLevel = effectiveLevel();
return level != PlatformLogger.Level.OFF
&& level.ordinal() >= effectiveLevel.ordinal();
}
@Override
! public boolean isEnabled() {
return level != PlatformLogger.Level.OFF;
}
@Override
! public void log(PlatformLogger.Level level, String msg) {
if (isLoggable(level)) {
publish(getCallerInfo(), logLevel(level), msg);
}
}
@Override
! public void log(PlatformLogger.Level level, String msg, Throwable thrown) {
if (isLoggable(level)) {
publish(getCallerInfo(), logLevel(level), msg, thrown);
}
}
@Override
! public void log(PlatformLogger.Level level, String msg, Object... params) {
if (isLoggable(level)) {
publish(getCallerInfo(), logLevel(level), msg, params);
}
}
private PlatformLogger.Level effectiveLevel() {
! if (level == null) return DEFAULT_LEVEL;
return level;
}
@Override
! public PlatformLogger.Level getPlatformLevel() {
return level;
}
@Override
! public void setPlatformLevel(PlatformLogger.Level newLevel) {
level = newLevel;
}
@Override
! public LoggerConfiguration getLoggerConfiguration() {
return this;
}
/**
* Default platform logging support - output messages to System.err -
--- 129,187 ----
// ---------------------------------------------------
// From PlatformLogger.Bridge
// ---------------------------------------------------
@Override
! public final boolean isLoggable(PlatformLogger.Level level) {
final PlatformLogger.Level effectiveLevel = effectiveLevel();
return level != PlatformLogger.Level.OFF
&& level.ordinal() >= effectiveLevel.ordinal();
}
@Override
! public final boolean isEnabled() {
return level != PlatformLogger.Level.OFF;
}
@Override
! public final void log(PlatformLogger.Level level, String msg) {
if (isLoggable(level)) {
publish(getCallerInfo(), logLevel(level), msg);
}
}
@Override
! public final void log(PlatformLogger.Level level, String msg, Throwable thrown) {
if (isLoggable(level)) {
publish(getCallerInfo(), logLevel(level), msg, thrown);
}
}
@Override
! public final void log(PlatformLogger.Level level, String msg, Object... params) {
if (isLoggable(level)) {
publish(getCallerInfo(), logLevel(level), msg, params);
}
}
private PlatformLogger.Level effectiveLevel() {
! if (level == null) return defaultLevel();
return level;
}
@Override
! public final PlatformLogger.Level getPlatformLevel() {
return level;
}
@Override
! public final void setPlatformLevel(PlatformLogger.Level newLevel) {
level = newLevel;
}
@Override
! public final LoggerConfiguration getLoggerConfiguration() {
return this;
}
/**
* Default platform logging support - output messages to System.err -
*** 220,230 ****
lookingForLogger = !isLoggerImplFrame(cname);
return false;
}
// Continue walking until we've found the relevant calling frame.
// Skips logging/logger infrastructure.
! return !isFilteredFrame(t);
}
private boolean isLoggerImplFrame(String cname) {
return (cname.equals("sun.util.logging.PlatformLogger") ||
cname.equals("jdk.internal.logger.SimpleConsoleLogger"));
--- 245,255 ----
lookingForLogger = !isLoggerImplFrame(cname);
return false;
}
// Continue walking until we've found the relevant calling frame.
// Skips logging/logger infrastructure.
! return !Formatting.isFilteredFrame(t);
}
private boolean isLoggerImplFrame(String cname) {
return (cname.equals("sun.util.logging.PlatformLogger") ||
cname.equals("jdk.internal.logger.SimpleConsoleLogger"));
*** 254,264 ****
String msg, Throwable thrown, String callerInfo) {
ZonedDateTime zdt = ZonedDateTime.now();
String throwable = toString(thrown);
! return String.format(Formatting.formatString,
zdt,
callerInfo,
name,
level.name(),
msg,
--- 279,289 ----
String msg, Throwable thrown, String callerInfo) {
ZonedDateTime zdt = ZonedDateTime.now();
String throwable = toString(thrown);
! return String.format(defaultFormatString(),
zdt,
callerInfo,
name,
level.name(),
msg,
*** 278,400 ****
msg = params == null || params.length == 0 ? msg
: Formatting.formatMessage(msg, params);
outputStream().print(format(level, msg, null, callerInfo));
}
- public static SimpleConsoleLogger makeSimpleLogger(String name, boolean usePlatformLevel) {
- return new SimpleConsoleLogger(name, usePlatformLevel);
- }
-
public static SimpleConsoleLogger makeSimpleLogger(String name) {
return new SimpleConsoleLogger(name, false);
}
- public static String getSimpleFormat(Function<String, String> defaultPropertyGetter) {
- return Formatting.getSimpleFormat(defaultPropertyGetter);
- }
-
- public static boolean isFilteredFrame(StackFrame st) {
- return Formatting.isFilteredFrame(st);
- }
-
@Override
! public void log(PlatformLogger.Level level, Supplier<String> msgSupplier) {
if (isLoggable(level)) {
publish(getCallerInfo(), logLevel(level), msgSupplier.get());
}
}
@Override
! public void log(PlatformLogger.Level level, Throwable thrown,
Supplier<String> msgSupplier) {
if (isLoggable(level)) {
publish(getCallerInfo(), logLevel(level), msgSupplier.get(), thrown);
}
}
@Override
! public void logp(PlatformLogger.Level level, String sourceClass,
String sourceMethod, String msg) {
if (isLoggable(level)) {
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msg);
}
}
@Override
! public void logp(PlatformLogger.Level level, String sourceClass,
String sourceMethod, Supplier<String> msgSupplier) {
if (isLoggable(level)) {
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msgSupplier.get());
}
}
@Override
! public void logp(PlatformLogger.Level level, String sourceClass, String sourceMethod,
String msg, Object... params) {
if (isLoggable(level)) {
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msg, params);
}
}
@Override
! public void logp(PlatformLogger.Level level, String sourceClass,
String sourceMethod, String msg, Throwable thrown) {
if (isLoggable(level)) {
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msg, thrown);
}
}
@Override
! public void logp(PlatformLogger.Level level, String sourceClass,
String sourceMethod, Throwable thrown, Supplier<String> msgSupplier) {
if (isLoggable(level)) {
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msgSupplier.get(), thrown);
}
}
@Override
! public void logrb(PlatformLogger.Level level, String sourceClass,
String sourceMethod, ResourceBundle bundle, String key, Object... params) {
if (isLoggable(level)) {
String msg = bundle == null ? key : bundle.getString(key);
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msg, params);
}
}
@Override
! public void logrb(PlatformLogger.Level level, String sourceClass,
String sourceMethod, ResourceBundle bundle, String key, Throwable thrown) {
if (isLoggable(level)) {
String msg = bundle == null ? key : bundle.getString(key);
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msg, thrown);
}
}
@Override
! public void logrb(PlatformLogger.Level level, ResourceBundle bundle,
String key, Object... params) {
if (isLoggable(level)) {
String msg = bundle == null ? key : bundle.getString(key);
publish(getCallerInfo(), logLevel(level), msg, params);
}
}
@Override
! public void logrb(PlatformLogger.Level level, ResourceBundle bundle,
String key, Throwable thrown) {
if (isLoggable(level)) {
String msg = bundle == null ? key : bundle.getString(key);
publish(getCallerInfo(), logLevel(level), msg, thrown);
}
}
! private static final class Formatting {
static final String DEFAULT_FORMAT =
"%1$tb %1$td, %1$tY %1$tl:%1$tM:%1$tS %1$Tp %2$s%n%4$s: %5$s%6$s%n";
! static final String FORMAT_PROP_KEY =
"java.util.logging.SimpleFormatter.format";
! static final String formatString = getSimpleFormat(null);
// Make it easier to wrap Logger...
static private final String[] skips;
static {
String additionalPkgs = AccessController.doPrivileged(
--- 303,415 ----
msg = params == null || params.length == 0 ? msg
: Formatting.formatMessage(msg, params);
outputStream().print(format(level, msg, null, callerInfo));
}
public static SimpleConsoleLogger makeSimpleLogger(String name) {
return new SimpleConsoleLogger(name, false);
}
@Override
! public final void log(PlatformLogger.Level level, Supplier<String> msgSupplier) {
if (isLoggable(level)) {
publish(getCallerInfo(), logLevel(level), msgSupplier.get());
}
}
@Override
! public final void log(PlatformLogger.Level level, Throwable thrown,
Supplier<String> msgSupplier) {
if (isLoggable(level)) {
publish(getCallerInfo(), logLevel(level), msgSupplier.get(), thrown);
}
}
@Override
! public final void logp(PlatformLogger.Level level, String sourceClass,
String sourceMethod, String msg) {
if (isLoggable(level)) {
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msg);
}
}
@Override
! public final void logp(PlatformLogger.Level level, String sourceClass,
String sourceMethod, Supplier<String> msgSupplier) {
if (isLoggable(level)) {
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msgSupplier.get());
}
}
@Override
! public final void logp(PlatformLogger.Level level, String sourceClass, String sourceMethod,
String msg, Object... params) {
if (isLoggable(level)) {
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msg, params);
}
}
@Override
! public final void logp(PlatformLogger.Level level, String sourceClass,
String sourceMethod, String msg, Throwable thrown) {
if (isLoggable(level)) {
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msg, thrown);
}
}
@Override
! public final void logp(PlatformLogger.Level level, String sourceClass,
String sourceMethod, Throwable thrown, Supplier<String> msgSupplier) {
if (isLoggable(level)) {
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msgSupplier.get(), thrown);
}
}
@Override
! public final void logrb(PlatformLogger.Level level, String sourceClass,
String sourceMethod, ResourceBundle bundle, String key, Object... params) {
if (isLoggable(level)) {
String msg = bundle == null ? key : bundle.getString(key);
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msg, params);
}
}
@Override
! public final void logrb(PlatformLogger.Level level, String sourceClass,
String sourceMethod, ResourceBundle bundle, String key, Throwable thrown) {
if (isLoggable(level)) {
String msg = bundle == null ? key : bundle.getString(key);
publish(getCallerInfo(sourceClass, sourceMethod), logLevel(level), msg, thrown);
}
}
@Override
! public final void logrb(PlatformLogger.Level level, ResourceBundle bundle,
String key, Object... params) {
if (isLoggable(level)) {
String msg = bundle == null ? key : bundle.getString(key);
publish(getCallerInfo(), logLevel(level), msg, params);
}
}
@Override
! public final void logrb(PlatformLogger.Level level, ResourceBundle bundle,
String key, Throwable thrown) {
if (isLoggable(level)) {
String msg = bundle == null ? key : bundle.getString(key);
publish(getCallerInfo(), logLevel(level), msg, thrown);
}
}
! static final class Formatting {
static final String DEFAULT_FORMAT =
"%1$tb %1$td, %1$tY %1$tl:%1$tM:%1$tS %1$Tp %2$s%n%4$s: %5$s%6$s%n";
! static final String DEFAULT_FORMAT_PROP_KEY =
! "jdk.system.logger.format";
! static final String JUL_FORMAT_PROP_KEY =
"java.util.logging.SimpleFormatter.format";
! static final String defaultFormatString = getSimpleFormat(DEFAULT_FORMAT_PROP_KEY, null);
// Make it easier to wrap Logger...
static private final String[] skips;
static {
String additionalPkgs = AccessController.doPrivileged(
*** 438,462 ****
}
return false;
}
! static String getSimpleFormat(Function<String, String> defaultPropertyGetter) {
// Using a lambda here causes
// jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java
// to fail - because that test has a testcase which somehow references
// PlatformLogger and counts the number of generated lambda classes
// So we explicitely use new PrivilegedAction<String> here.
! String format =
! AccessController.doPrivileged(new PrivilegedAction<String>() {
@Override
public String run() {
! return System.getProperty(FORMAT_PROP_KEY);
}
! });
if (format == null && defaultPropertyGetter != null) {
! format = defaultPropertyGetter.apply(FORMAT_PROP_KEY);
}
if (format != null) {
try {
// validate the user-defined format string
String.format(format, ZonedDateTime.now(), "", "", "", "", "");
--- 453,479 ----
}
return false;
}
! static String getSimpleFormat(String key, Function<String, String> defaultPropertyGetter) {
// Using a lambda here causes
// jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java
// to fail - because that test has a testcase which somehow references
// PlatformLogger and counts the number of generated lambda classes
// So we explicitely use new PrivilegedAction<String> here.
! String format = AccessController.doPrivileged(
! new PrivilegedAction<String>() {
@Override
public String run() {
! return System.getProperty(key);
}
! }, null,
! new PropertyPermission(DEFAULT_FORMAT_PROP_KEY, "read"),
! new PropertyPermission(JUL_FORMAT_PROP_KEY, "read"));
if (format == null && defaultPropertyGetter != null) {
! format = defaultPropertyGetter.apply(key);
}
if (format != null) {
try {
// validate the user-defined format string
String.format(format, ZonedDateTime.now(), "", "", "", "", "");
< prev index next >