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(); }