src/share/classes/java/util/logging/StreamHandler.java

Print this page

        

*** 25,34 **** --- 25,36 ---- package java.util.logging; import java.io.*; + import java.security.AccessController; + import java.security.PrivilegedAction; /** * Stream based logging <tt>Handler</tt>. * <p> * This is primarily intended as a base class or support class to
*** 75,128 **** public class StreamHandler extends Handler { private OutputStream output; private boolean doneHeader; private volatile Writer writer; ! // Private method to configure a StreamHandler from LogManager ! // properties and/or default values as specified in the class // javadoc. ! private void configure() { LogManager manager = LogManager.getLogManager(); ! String cname = getClass().getName(); setLevel(manager.getLevelProperty(cname +".level", Level.INFO)); setFilter(manager.getFilterProperty(cname +".filter", null)); ! setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter())); try { setEncoding(manager.getStringProperty(cname +".encoding", null)); } catch (Exception ex) { try { setEncoding(null); } catch (Exception ex2) { // doing a setEncoding with null should always work. // assert false; } } } /** * Create a <tt>StreamHandler</tt>, with no current output stream. */ public StreamHandler() { ! sealed = false; ! configure(); ! sealed = true; } /** * Create a <tt>StreamHandler</tt> with a given <tt>Formatter</tt> * and output stream. * <p> * @param out the target output stream * @param formatter Formatter to be used to format output */ public StreamHandler(OutputStream out, Formatter formatter) { ! sealed = false; ! configure(); ! setFormatter(formatter); ! setOutputStream(out); ! sealed = true; } /** * Change the output stream. * <P> --- 77,151 ---- public class StreamHandler extends Handler { private OutputStream output; private boolean doneHeader; private volatile Writer writer; ! // Private PrivilegedAction to configure a StreamHandler from constructor parameters, ! // LogManager properties and/or default values as specified in the class // javadoc. ! private class ConfigureAction implements PrivilegedAction<Void> { ! private final OutputStream out; ! private final Formatter formatter; ! ! ConfigureAction() { ! this.out = null; ! this.formatter = null; ! } ! ! ConfigureAction(OutputStream out, Formatter formatter) { ! if (out == null || formatter == null) { ! throw new NullPointerException(); ! } ! this.out = out; ! this.formatter = formatter; ! } ! ! @Override ! public Void run() { LogManager manager = LogManager.getLogManager(); ! String cname = StreamHandler.this.getClass().getName(); setLevel(manager.getLevelProperty(cname +".level", Level.INFO)); setFilter(manager.getFilterProperty(cname +".filter", null)); ! setFormatter(formatter == null // use configured formatter if null ! ? manager.getFormatterProperty(cname +".formatter", new SimpleFormatter()) ! : formatter); try { setEncoding(manager.getStringProperty(cname +".encoding", null)); } catch (Exception ex) { try { setEncoding(null); } catch (Exception ex2) { // doing a setEncoding with null should always work. // assert false; } } + if (out != null) { // don't set output stream if null + setOutputStream(out); + } + return null; + } } /** * Create a <tt>StreamHandler</tt>, with no current output stream. */ public StreamHandler() { ! AccessController.doPrivileged(new ConfigureAction(), ! null, LogManager.controlPermission); } /** * Create a <tt>StreamHandler</tt> with a given <tt>Formatter</tt> * and output stream. * <p> * @param out the target output stream * @param formatter Formatter to be used to format output */ public StreamHandler(OutputStream out, Formatter formatter) { ! AccessController.doPrivileged(new ConfigureAction(out, formatter), ! null, LogManager.controlPermission); } /** * Change the output stream. * <P>