src/share/classes/java/util/logging/LogManager.java
Print this page
*** 389,433 ****
}
}
}
}
// Returns the LoggerContext for the user code (i.e. application or AppContext).
// Loggers are isolated from each AppContext.
private LoggerContext getUserContext() {
LoggerContext context = null;
SecurityManager sm = System.getSecurityManager();
JavaAWTAccess javaAwtAccess = SharedSecrets.getJavaAWTAccess();
if (sm != null && javaAwtAccess != null) {
synchronized (javaAwtAccess) {
! // AppContext.getAppContext() returns the system AppContext if called
! // from a system thread but Logger.getLogger might be called from
! // an applet code. Instead, find the AppContext of the applet code
! // from the execution stack.
! Object ecx = javaAwtAccess.getExecutionContext();
! if (ecx == null) {
! // fall back to thread group seach of AppContext
! ecx = javaAwtAccess.getContext();
! }
if (ecx != null) {
! context = (LoggerContext)javaAwtAccess.get(ecx, LoggerContext.class);
if (context == null) {
- if (javaAwtAccess.isMainAppContext()) {
- context = userContext;
- } else {
// Create a new LoggerContext for the applet.
// The new logger context has its requiresDefaultLoggers
// flag set to true - so that these loggers will be
// lazily added when the context is firt accessed.
context = new LoggerContext(true);
! }
! javaAwtAccess.put(ecx, LoggerContext.class, context);
}
}
}
}
return context != null ? context : userContext;
}
private List<LoggerContext> contexts() {
List<LoggerContext> cxs = new ArrayList<>();
--- 389,431 ----
}
}
}
}
+ // LoggerContext maps from AppContext
+ private static WeakHashMap<Object, LoggerContext> contextsMap = null;
+
// Returns the LoggerContext for the user code (i.e. application or AppContext).
// Loggers are isolated from each AppContext.
private LoggerContext getUserContext() {
LoggerContext context = null;
SecurityManager sm = System.getSecurityManager();
JavaAWTAccess javaAwtAccess = SharedSecrets.getJavaAWTAccess();
if (sm != null && javaAwtAccess != null) {
+ // for each applet, it has its own LoggerContext isolated from others
synchronized (javaAwtAccess) {
! // find the AppContext of the applet code
! // will be null if we are in the main app context.
! final Object ecx = javaAwtAccess.getAppletContext();
if (ecx != null) {
! if (contextsMap == null) {
! contextsMap = new WeakHashMap<>();
! }
! context = contextsMap.get(ecx);
if (context == null) {
// Create a new LoggerContext for the applet.
// The new logger context has its requiresDefaultLoggers
// flag set to true - so that these loggers will be
// lazily added when the context is firt accessed.
context = new LoggerContext(true);
! contextsMap.put(ecx, context);
}
}
}
}
+ // for standalone app, return userContext
return context != null ? context : userContext;
}
private List<LoggerContext> contexts() {
List<LoggerContext> cxs = new ArrayList<>();