src/share/classes/java/util/logging/MemoryHandler.java
Print this page
*** 23,32 ****
--- 23,35 ----
* questions.
*/
package java.util.logging;
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+
/**
* <tt>Handler</tt> that buffers requests in a circular buffer in memory.
* <p>
* Normally this <tt>Handler</tt> simply stores incoming <tt>LogRecords</tt>
* into its memory buffer and discards earlier records. This buffering
*** 92,126 ****
private int size;
private Handler target;
private LogRecord buffer[];
int start, count;
! // Private method to configure a MemoryHandler from LogManager
// properties and/or default values as specified in the class
// javadoc.
! private void configure() {
LogManager manager = LogManager.getLogManager();
! String cname = getClass().getName();
pushLevel = manager.getLevelProperty(cname +".push", Level.SEVERE);
size = manager.getIntProperty(cname + ".size", DEFAULT_SIZE);
if (size <= 0) {
size = DEFAULT_SIZE;
}
setLevel(manager.getLevelProperty(cname +".level", Level.ALL));
setFilter(manager.getFilterProperty(cname +".filter", null));
setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter()));
}
/**
* Create a <tt>MemoryHandler</tt> and configure it based on
* <tt>LogManager</tt> configuration properties.
*/
public MemoryHandler() {
! sealed = false;
! configure();
! sealed = true;
LogManager manager = LogManager.getLogManager();
String handlerName = getClass().getName();
String targetName = manager.getProperty(handlerName+".target");
if (targetName == null) {
--- 95,131 ----
private int size;
private Handler target;
private LogRecord buffer[];
int start, count;
! // Private PrivilegedAction to configure a MemoryHandler from LogManager
// properties and/or default values as specified in the class
// javadoc.
! private class ConfigureAction implements PrivilegedAction<Void> {
! @Override
! public Void run() {
LogManager manager = LogManager.getLogManager();
! String cname = MemoryHandler.this.getClass().getName();
pushLevel = manager.getLevelProperty(cname +".push", Level.SEVERE);
size = manager.getIntProperty(cname + ".size", DEFAULT_SIZE);
if (size <= 0) {
size = DEFAULT_SIZE;
}
setLevel(manager.getLevelProperty(cname +".level", Level.ALL));
setFilter(manager.getFilterProperty(cname +".filter", null));
setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter()));
+ return null;
+ }
}
/**
* Create a <tt>MemoryHandler</tt> and configure it based on
* <tt>LogManager</tt> configuration properties.
*/
public MemoryHandler() {
! AccessController.doPrivileged(new ConfigureAction(), null, LogManager.controlPermission);
LogManager manager = LogManager.getLogManager();
String handlerName = getClass().getName();
String targetName = manager.getProperty(handlerName+".target");
if (targetName == null) {
*** 162,174 ****
throw new NullPointerException();
}
if (size <= 0) {
throw new IllegalArgumentException();
}
! sealed = false;
! configure();
! sealed = true;
this.target = target;
this.pushLevel = pushLevel;
this.size = size;
init();
}
--- 167,177 ----
throw new NullPointerException();
}
if (size <= 0) {
throw new IllegalArgumentException();
}
! AccessController.doPrivileged(new ConfigureAction(), null, LogManager.controlPermission);
this.target = target;
this.pushLevel = pushLevel;
this.size = size;
init();
}