< prev index next >
src/java.logging/share/classes/java/util/logging/Logger.java
Print this page
@@ -38,10 +38,11 @@
import java.util.ResourceBundle;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Supplier;
import sun.reflect.CallerSensitive;
import sun.reflect.Reflection;
+import static jdk.internal.logger.DefaultLoggerFinder.isSystem;
/**
* A Logger object is used to log messages for a specific
* system or application component. Loggers are normally named,
* using a hierarchical dot-separated namespace. Logger names
@@ -377,22 +378,20 @@
*/
protected Logger(String name, String resourceBundleName) {
this(name, resourceBundleName, null, LogManager.getLogManager(), false);
}
- Logger(String name, String resourceBundleName, Class<?> caller, LogManager manager, boolean isSystemLogger) {
+ Logger(String name, String resourceBundleName, Module caller,
+ LogManager manager, boolean isSystemLogger) {
this.manager = manager;
this.isSystemLogger = isSystemLogger;
setupResourceInfo(resourceBundleName, caller);
this.name = name;
levelValue = Level.INFO.intValue();
}
- private void setCallerModuleRef(Class<?> caller) {
- Module callerModule = ((caller != null)
- ? caller.getModule()
- : null);
+ private void setCallerModuleRef(Module callerModule) {
if (callerModule != null) {
this.callerModuleRef = new WeakReference<>(callerModule);
}
}
@@ -616,11 +615,11 @@
LogManager manager = LogManager.getLogManager();
// all loggers in the system context will default to
// the system logger's resource bundle - therefore the caller won't
// be needed and can be null.
- Logger result = manager.demandSystemLogger(name, SYSTEM_LOGGER_RB_NAME, null);
+ Logger result = manager.demandSystemLogger(name, SYSTEM_LOGGER_RB_NAME, (Module)null);
return result;
}
/**
* Create an anonymous Logger. The newly created Logger is not
@@ -679,12 +678,14 @@
@CallerSensitive
public static Logger getAnonymousLogger(String resourceBundleName) {
LogManager manager = LogManager.getLogManager();
// cleanup some Loggers that have been GC'ed
manager.drainLoggerRefQueueBounded();
+ final Class<?> callerClass = Reflection.getCallerClass();
+ final Module module = callerClass.getModule();
Logger result = new Logger(null, resourceBundleName,
- Reflection.getCallerClass(), manager, false);
+ module, manager, false);
result.anonymous = true;
Logger root = manager.getLogger("");
result.doSetParent(root);
return result;
}
@@ -2044,18 +2045,23 @@
return null; // no luck
}
}
}
+ private void setupResourceInfo(String name, Class<?> caller) {
+ final Module module = caller == null ? null : caller.getModule();
+ setupResourceInfo(name, module);
+ }
+
// Private utility method to initialize our one entry
// resource bundle name cache and the callers Module
// Note: for consistency reasons, we are careful to check
// that a suitable ResourceBundle exists before setting the
// resourceBundleName field.
// Synchronized to prevent races in setting the fields.
private synchronized void setupResourceInfo(String name,
- Class<?> callerClass) {
+ Module callerModule) {
final LoggerBundle lb = loggerBundle;
if (lb.resourceBundleName != null) {
// this Logger already has a ResourceBundle
if (lb.resourceBundleName.equals(name)) {
@@ -2070,12 +2076,13 @@
if (name == null) {
return;
}
- setCallerModuleRef(callerClass);
- if (isSystemLogger && (callerClass != null && callerClass.getClassLoader() != null)) {
+ setCallerModuleRef(callerModule);
+
+ if (isSystemLogger && (callerModule != null && !isSystem(callerModule))) {
checkPermission();
}
if (name.equals(SYSTEM_LOGGER_RB_NAME)) {
loggerBundle = SYSTEM_BUNDLE;
< prev index next >