ceki        2003/03/18 12:28:19

  Modified:    src/java/org/apache/log4j PropertyConfigurator.java
  Log:
  Correct  Jalopy formatting
  
  Revision  Changes    Path
  1.58      +298 -311  
jakarta-log4j/src/java/org/apache/log4j/PropertyConfigurator.java
  
  Index: PropertyConfigurator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/PropertyConfigurator.java,v
  retrieving revision 1.57
  retrieving revision 1.58
  diff -u -r1.57 -r1.58
  --- PropertyConfigurator.java 18 Mar 2003 19:46:30 -0000      1.57
  +++ PropertyConfigurator.java 18 Mar 2003 20:28:19 -0000      1.58
  @@ -77,50 +77,46 @@
   
   
   /**
  - * Allows the configuration of log4j from an external file.  See <b>[EMAIL 
PROTECTED]
  - * #doConfigure(String, LoggerRepository)}</b> for the expected format.
  - * 
  - * <p>
  - * It is sometimes useful to see how log4j is reading configuration files. You
  - * can enable log4j internal logging by defining the <b>log4j.debug</b>
  - * variable.
  - * </p>
  - * 
  - * <P>
  - * As of log4j version 0.8.5, at class initialization time class, the file
  - * <b>log4j.properties</b> will be searched from the search path used to load
  - * classes. If the file can be found, then it will be fed to the [EMAIL PROTECTED]
  - * PropertyConfigurator#configure(java.net.URL)} method.
  - * </p>
  - * 
  - * <p>
  - * The <code>PropertyConfigurator</code> does not handle the advanced
  - * configuration features supported by the [EMAIL PROTECTED]
  - * org.apache.log4j.xml.DOMConfigurator DOMConfigurator} such as support for
  - * [EMAIL PROTECTED] org.apache.log4j.spi.Filter Filters}, custom [EMAIL PROTECTED]
  - * org.apache.log4j.spi.ErrorHandler ErrorHandlers}, nested appenders such as
  - * the [EMAIL PROTECTED] org.apache.log4j.AsyncAppender AsyncAppender}, etc.
  - * </p>
  - * 
  - * <p>
  - * All option <em>values</em> admit variable substitution. The syntax of
  - * variable substitution is similar to that of Unix shells. The string
  - * between an opening <b>&quot;${&quot;</b> and closing <b>&quot;}&quot;</b>
  - * is interpreted as a key. The value of the substituted variable can be
  - * defined as a system property or in the configuration file itself. The
  - * value of the key is first searched in the system properties, and if not
  - * found there, it is then searched in the configuration file being parsed.
  - * The corresponding value replaces the ${variableName} sequence. For
  - * example, if <code>java.home</code> system property is set to
  - * <code>/home/xyz</code>, then every occurrence of the sequence
  - * <code>${java.home}</code> will be interpreted as <code>/home/xyz</code>.
  - * </p>
  - *
  - * @author Ceki G&uuml;lc&uuml;
  - * @author Anders Kristensen
  - *
  - * @since 0.8.1
  - */
  +   Allows the configuration of log4j from an external file.  See
  +   <b>[EMAIL PROTECTED] #doConfigure(String, LoggerRepository)}</b> for the
  +   expected format.
  +
  +   <p>It is sometimes useful to see how log4j is reading configuration
  +   files. You can enable log4j internal logging by defining the
  +   <b>log4j.debug</b> variable.
  +
  +   <P>As of log4j version 0.8.5, at class initialization time class,
  +   the file <b>log4j.properties</b> will be searched from the search
  +   path used to load classes. If the file can be found, then it will
  +   be fed to the [EMAIL PROTECTED] PropertyConfigurator#configure(java.net.URL)}
  +   method.
  +
  +   <p>The <code>PropertyConfigurator</code> does not handle the
  +   advanced configuration features supported by the [EMAIL PROTECTED]
  +   org.apache.log4j.xml.DOMConfigurator DOMConfigurator} such as
  +   support for [EMAIL PROTECTED] org.apache.log4j.spi.Filter Filters}, custom
  +   [EMAIL PROTECTED] org.apache.log4j.spi.ErrorHandler ErrorHandlers}, nested
  +   appenders such as the [EMAIL PROTECTED] org.apache.log4j.AsyncAppender
  +   AsyncAppender}, etc.
  +
  +   <p>All option <em>values</em> admit variable substitution. The
  +   syntax of variable substitution is similar to that of Unix
  +   shells. The string between an opening <b>&quot;${&quot;</b> and
  +   closing <b>&quot;}&quot;</b> is interpreted as a key. The value of
  +   the substituted variable can be defined as a system property or in
  +   the configuration file itself. The value of the key is first
  +   searched in the system properties, and if not found there, it is
  +   then searched in the configuration file being parsed.  The
  +   corresponding value replaces the ${variableName} sequence. For
  +   example, if <code>java.home</code> system property is set to
  +   <code>/home/xyz</code>, then every occurrence of the sequence
  +   <code>${java.home}</code> will be interpreted as
  +   <code>/home/xyz</code>.
  +
  +
  +   @author Ceki G&uuml;lc&uuml;
  +   @author Anders Kristensen
  +   @since 0.8.1 */
   public class PropertyConfigurator implements Configurator {
     static final String CATEGORY_PREFIX = "log4j.category.";
     static final String LOGGER_PREFIX = "log4j.logger.";
  @@ -132,224 +128,210 @@
     static final String RENDERER_PREFIX = "log4j.renderer.";
     static final String THRESHOLD_PREFIX = "log4j.threshold";
   
  -  /**
  -   * Key for specifying the [EMAIL PROTECTED] org.apache.log4j.spi.LoggerFactory
  -   * LoggerFactory}.  Currently set to "<code>log4j.loggerFactory</code>".
  -   */
  +  /** Key for specifying the [EMAIL PROTECTED] org.apache.log4j.spi.LoggerFactory
  +      LoggerFactory}.  Currently set to "<code>log4j.loggerFactory</code>".  */
     public static final String LOGGER_FACTORY_KEY = "log4j.loggerFactory";
     private static final String INTERNAL_ROOT_NAME = "root";
   
     /**
  -   * Used internally to keep track of configured appenders.
  +     Used internally to keep track of configured appenders.
      */
     protected Hashtable registry = new Hashtable(11);
     protected LoggerFactory loggerFactory = new DefaultCategoryFactory();
   
     /**
  -   * Read configuration from a file. <b>The existing configuration is not
  -   * cleared nor reset.</b> If you require a different behavior, then call
  -   * [EMAIL PROTECTED]  LogManager#resetConfiguration resetConfiguration} method 
before
  -   * calling <code>doConfigure</code>.
  -   * 
  -   * <p>
  -   * The configuration file consists of statements in the format
  -   * <code>key=value</code>. The syntax of different configuration elements
  -   * are discussed below.
  -   * </p>
  -   * <h3>
  -   * 
  -   * <p>
  -   * The repository-wide threshold filters logging requests by level
  -   * regardless of logger. The syntax is:
  -   * <pre>
  -   *  log4j.threshold=[level]
  -   *  </pre>
  -   * </p>
  -   * 
  -   * <p>
  -   * The level value can consist of the string values OFF, FATAL, ERROR, WARN,
  -   * INFO, DEBUG, ALL or a <em>custom level</em> value. A custom level value
  -   * can be specified in the form level#classname. By default the
  -   * repository-wide threshold is set to the lowest possible value, namely
  -   * the level <code>ALL</code>.
  -   * </p>
  -   * <h3>
  -   * 
  -   * <p>
  -   * Appender configuration syntax is:
  -   * <pre>
  -   *  # For appender named <i>appenderName</i>, set its class.
  -   *  # Note: The appender name can contain dots.
  -   *  log4j.appender.appenderName=fully.qualified.name.of.appender.class
  -   *  # Set appender specific options.
  -   *  log4j.appender.appenderName.option1=value1
  -   *  ...
  -   *  log4j.appender.appenderName.optionN=valueN
  -   *  </pre>
  -   * For each named appender you can configure its [EMAIL PROTECTED] Layout}. The 
syntax
  -   * for configuring an appender's layout is:
  -   * <pre>
  -   *  log4j.appender.appenderName.layout=fully.qualified.name.of.layout.class
  -   *  log4j.appender.appenderName.layout.option1=value1
  -   *  ....
  -   *  log4j.appender.appenderName.layout.optionN=valueN
  -   *  </pre>
  -   * </p>
  -   * <h3>
  -   * 
  -   * <p>
  -   * The syntax for configuring the root logger is:
  -   * <pre>
  -   *  log4j.rootLogger=[level], appenderName, appenderName, ...
  -   *  </pre>
  -   * </p>
  -   * 
  -   * <p>
  -   * This syntax means that an optional <em>level</em> can be supplied
  -   * followed by appender names separated by commas.
  -   * </p>
  -   * 
  -   * <p>
  -   * The level value can consist of the string values OFF, FATAL, ERROR, WARN,
  -   * INFO, DEBUG, ALL or a <em>custom level</em> value. A custom level value
  -   * can be specified in the form <code>level#classname</code>.
  -   * </p>
  -   * 
  -   * <p>
  -   * If a level value is specified, then the root level is set to the
  -   * corresponding level.  If no level value is specified, then the root
  -   * level remains untouched.
  -   * </p>
  -   * 
  -   * <p>
  -   * The root logger can be assigned multiple appenders.
  -   * </p>
  -   * 
  -   * <p>
  -   * Each <i>appenderName</i> (separated by commas) will be added to the root
  -   * logger. The named appender is defined using the appender syntax defined
  -   * above.
  -   * </p>
  -   * 
  -   * <p>
  -   * For non-root categories the syntax is almost the same:
  -   * <pre>
  -   *  log4j.logger.logger_name=[level|INHERITED|NULL], appenderName, appenderName, 
...
  -   *  </pre>
  -   * </p>
  -   * 
  -   * <p>
  -   * The meaning of the optional level value is discussed above in relation to
  -   * the root logger. In addition however, the value INHERITED can be
  -   * specified meaning that the named logger should inherit its level from
  -   * the logger hierarchy.
  -   * </p>
  -   * 
  -   * <p>
  -   * If no level value is supplied, then the level of the named logger remains
  -   * untouched.
  -   * </p>
  -   * 
  -   * <p>
  -   * By default categories inherit their level from the hierarchy. However, if
  -   * you set the level of a logger and later decide that that logger should
  -   * inherit its level, then you should specify INHERITED as the value for
  -   * the level value. NULL is a synonym for INHERITED.
  -   * </p>
  -   * 
  -   * <p>
  -   * Similar to the root logger syntax, each <i>appenderName</i> (separated by
  -   * commas) will be attached to the named logger.
  -   * </p>
  -   * 
  -   * <p>
  -   * See the <a href="../../../../manual.html#additivity">appender additivity
  -   * rule</a> in the user manual for the meaning of the
  -   * <code>additivity</code> flag.
  -   * </p>
  -   * <h3>
  -   * You can customize the way message objects of a given type are converted
  -   * to String before being logged. This is done by specifying an [EMAIL PROTECTED]
  -   * org.apache.log4j.or.ObjectRenderer ObjectRenderer} for the object type
  -   * would like to customize.
  -   * 
  -   * <p>
  -   * The syntax is:
  -   * <pre>
  -   *  
log4j.renderer.fully.qualified.name.of.rendered.class=fully.qualified.name.of.rendering.class
  -   *  </pre>
  -   * As in,
  -   * <pre>
  -   *  log4j.renderer.my.Fruit=my.FruitRenderer
  -   *  </pre>
  -   * </p>
  -   * <h3>
  -   * The usage of custom logger factories is discouraged and no longer
  -   * documented.
  -   * <h3>
  -   * 
  -   * <p>
  -   * An example configuration is given below. Other configuration file
  -   * examples are given in the <code>examples</code> folder.
  -   * <pre>
  -   *  # Set options for appender named "A1".
  -   *  # Appender "A1" will be a SyslogAppender
  -   *  log4j.appender.A1=org.apache.log4j.net.SyslogAppender
  -   *  # The syslog daemon resides on www.abc.net
  -   *  log4j.appender.A1.SyslogHost=www.abc.net
  -   *  # A1's layout is a PatternLayout, using the conversion pattern
  -   *  # <b>%r %-5p %c{2} %M.%L %x - %m\n</b>. Thus, the log output will
  -   *  # include # the relative time since the start of the application in
  -   *  # milliseconds, followed by the level of the log request,
  -   *  # followed by the two rightmost components of the logger name,
  -   *  # followed by the callers method name, followed by the line number,
  -   *  # the nested disgnostic context and finally the message itself.
  -   *  # Refer to the documentation of [EMAIL PROTECTED] PatternLayout} for further 
information
  -   *  # on the syntax of the ConversionPattern key.
  -   *  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  -   *  log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %c{2} %M.%L %x - %m\n
  -   *  # Set options for appender named "A2"
  -   *  # A2 should be a RollingFileAppender, with maximum file size of 10 MB
  -   *  # using at most one backup file. A2's layout is TTCC, using the
  -   *  # ISO8061 date format with context printing enabled.
  -   *  log4j.appender.A2=org.apache.log4j.RollingFileAppender
  -   *  log4j.appender.A2.MaxFileSize=10MB
  -   *  log4j.appender.A2.MaxBackupIndex=1
  -   *  log4j.appender.A2.layout=org.apache.log4j.TTCCLayout
  -   *  log4j.appender.A2.layout.ContextPrinting=enabled
  -   *  log4j.appender.A2.layout.DateFormat=ISO8601
  -   *  # Root logger set to DEBUG using the A2 appender defined above.
  -   *  log4j.rootLogger=DEBUG, A2
  -   *  # Logger definitions:
  -   *  # The SECURITY logger inherits is level from root. However, it's output
  -   *  # will go to A1 appender defined above. It's additivity is non-cumulative.
  -   *  log4j.logger.SECURITY=INHERIT, A1
  -   *  log4j.additivity.SECURITY=false
  -   *  # Only warnings or above will be logged for the logger "SECURITY.access".
  -   *  # Output will go to A1.
  -   *  log4j.logger.SECURITY.access=WARN
  -   *  # The logger "class.of.the.day" inherits its level from the
  -   *  # logger hierarchy.  Output will go to the appender's of the root
  -   *  # logger, A2 in this case.
  -   *  log4j.logger.class.of.the.day=INHERIT
  -   *  </pre>
  -   * </p>
  -   * 
  -   * <p>
  -   * Refer to the <b>setOption</b> method in each Appender and Layout for
  -   * class specific options.
  -   * </p>
  -   * 
  -   * <p>
  -   * Use the <code>#</code> or <code>!</code> characters at the beginning of a
  -   * line for comments.
  -   * </p>
  -   * 
  -   * <p></p>
  -   *
  -   * @param configFileName The name of the configuration file where the
  -   *        configuration information is stored.
  -   */
  +    Read configuration from a file. <b>The existing configuration is
  +    not cleared nor reset.</b> If you require a different behavior,
  +    then call [EMAIL PROTECTED]  LogManager#resetConfiguration
  +    resetConfiguration} method before calling
  +    <code>doConfigure</code>.
  +
  +    <p>The configuration file consists of statements in the format
  +    <code>key=value</code>. The syntax of different configuration
  +    elements are discussed below.
  +
  +    <h3>Repository-wide threshold</h3>
  +
  +    <p>The repository-wide threshold filters logging requests by level
  +    regardless of logger. The syntax is:
  +
  +    <pre>
  +    log4j.threshold=[level]
  +    </pre>
  +
  +    <p>The level value can consist of the string values OFF, FATAL,
  +    ERROR, WARN, INFO, DEBUG, ALL or a <em>custom level</em> value. A
  +    custom level value can be specified in the form
  +    level#classname. By default the repository-wide threshold is set
  +    to the lowest possible value, namely the level <code>ALL</code>.
  +    </p>
  +
  +
  +    <h3>Appender configuration</h3>
  +
  +    <p>Appender configuration syntax is:
  +    <pre>
  +    # For appender named <i>appenderName</i>, set its class.
  +    # Note: The appender name can contain dots.
  +    log4j.appender.appenderName=fully.qualified.name.of.appender.class
  +
  +    # Set appender specific options.
  +    log4j.appender.appenderName.option1=value1
  +    ...
  +    log4j.appender.appenderName.optionN=valueN
  +    </pre>
  +
  +    For each named appender you can configure its [EMAIL PROTECTED] Layout}. The
  +    syntax for configuring an appender's layout is:
  +    <pre>
  +    log4j.appender.appenderName.layout=fully.qualified.name.of.layout.class
  +    log4j.appender.appenderName.layout.option1=value1
  +    ....
  +    log4j.appender.appenderName.layout.optionN=valueN
  +    </pre>
  +
  +    <h3>Configuring loggers</h3>
  +
  +    <p>The syntax for configuring the root logger is:
  +    <pre>
  +      log4j.rootLogger=[level], appenderName, appenderName, ...
  +    </pre>
  +
  +    <p>This syntax means that an optional <em>level</em> can be
  +    supplied followed by appender names separated by commas.
  +
  +    <p>The level value can consist of the string values OFF, FATAL,
  +    ERROR, WARN, INFO, DEBUG, ALL or a <em>custom level</em> value. A
  +    custom level value can be specified in the form
  +    <code>level#classname</code>.
  +
  +    <p>If a level value is specified, then the root level is set
  +    to the corresponding level.  If no level value is specified,
  +    then the root level remains untouched.
  +
  +    <p>The root logger can be assigned multiple appenders.
  +
  +    <p>Each <i>appenderName</i> (separated by commas) will be added to
  +    the root logger. The named appender is defined using the
  +    appender syntax defined above.
  +
  +    <p>For non-root categories the syntax is almost the same:
  +    <pre>
  +    log4j.logger.logger_name=[level|INHERITED|NULL], appenderName, appenderName, ...
  +    </pre>
  +
  +    <p>The meaning of the optional level value is discussed above
  +    in relation to the root logger. In addition however, the value
  +    INHERITED can be specified meaning that the named logger should
  +    inherit its level from the logger hierarchy.
  +
  +    <p>If no level value is supplied, then the level of the
  +    named logger remains untouched.
  +
  +    <p>By default categories inherit their level from the
  +    hierarchy. However, if you set the level of a logger and later
  +    decide that that logger should inherit its level, then you should
  +    specify INHERITED as the value for the level value. NULL is a
  +    synonym for INHERITED.
  +
  +    <p>Similar to the root logger syntax, each <i>appenderName</i>
  +    (separated by commas) will be attached to the named logger.
  +
  +    <p>See the <a href="../../../../manual.html#additivity">appender
  +    additivity rule</a> in the user manual for the meaning of the
  +    <code>additivity</code> flag.
  +
  +    <h3>ObjectRenderers</h3>
  +
  +    You can customize the way message objects of a given type are
  +    converted to String before being logged. This is done by
  +    specifying an [EMAIL PROTECTED] org.apache.log4j.or.ObjectRenderer 
ObjectRenderer}
  +    for the object type would like to customize.
  +
  +    <p>The syntax is:
  +
  +    <pre>
  +    
log4j.renderer.fully.qualified.name.of.rendered.class=fully.qualified.name.of.rendering.class
  +    </pre>
  +
  +    As in,
  +    <pre>
  +    log4j.renderer.my.Fruit=my.FruitRenderer
  +    </pre>
  +
  +    <h3>Logger Factories</h3>
  +
  +    The usage of custom logger factories is discouraged and no longer
  +    documented.
  +
  +    <h3>Example</h3>
  +
  +    <p>An example configuration is given below. Other configuration
  +    file examples are given in the <code>examples</code> folder.
  +
  +    <pre>
  +
  +    # Set options for appender named "A1".
  +    # Appender "A1" will be a SyslogAppender
  +    log4j.appender.A1=org.apache.log4j.net.SyslogAppender
  +
  +    # The syslog daemon resides on www.abc.net
  +    log4j.appender.A1.SyslogHost=www.abc.net
  +
  +    # A1's layout is a PatternLayout, using the conversion pattern
  +    # <b>%r %-5p %c{2} %M.%L %x - %m\n</b>. Thus, the log output will
  +    # include # the relative time since the start of the application in
  +    # milliseconds, followed by the level of the log request,
  +    # followed by the two rightmost components of the logger name,
  +    # followed by the callers method name, followed by the line number,
  +    # the nested disgnostic context and finally the message itself.
  +    # Refer to the documentation of [EMAIL PROTECTED] PatternLayout} for further 
information
  +    # on the syntax of the ConversionPattern key.
  +    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  +    log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %c{2} %M.%L %x - %m\n
  +
  +    # Set options for appender named "A2"
  +    # A2 should be a RollingFileAppender, with maximum file size of 10 MB
  +    # using at most one backup file. A2's layout is TTCC, using the
  +    # ISO8061 date format with context printing enabled.
  +    log4j.appender.A2=org.apache.log4j.RollingFileAppender
  +    log4j.appender.A2.MaxFileSize=10MB
  +    log4j.appender.A2.MaxBackupIndex=1
  +    log4j.appender.A2.layout=org.apache.log4j.TTCCLayout
  +    log4j.appender.A2.layout.ContextPrinting=enabled
  +    log4j.appender.A2.layout.DateFormat=ISO8601
  +
  +    # Root logger set to DEBUG using the A2 appender defined above.
  +    log4j.rootLogger=DEBUG, A2
  +
  +    # Logger definitions:
  +    # The SECURITY logger inherits is level from root. However, it's output
  +    # will go to A1 appender defined above. It's additivity is non-cumulative.
  +    log4j.logger.SECURITY=INHERIT, A1
  +    log4j.additivity.SECURITY=false
  +
  +    # Only warnings or above will be logged for the logger "SECURITY.access".
  +    # Output will go to A1.
  +    log4j.logger.SECURITY.access=WARN
  +
  +
  +    # The logger "class.of.the.day" inherits its level from the
  +    # logger hierarchy.  Output will go to the appender's of the root
  +    # logger, A2 in this case.
  +    log4j.logger.class.of.the.day=INHERIT
  +    </pre>
  +
  +    <p>Refer to the <b>setOption</b> method in each Appender and
  +    Layout for class specific options.
  +
  +    <p>Use the <code>#</code> or <code>!</code> characters at the
  +    beginning of a line for comments.
  +
  +   <p>
  +   @param configFileName The name of the configuration file where the
  +   configuration information is stored.
  +
  +  */
     public void doConfigure(String configFileName, LoggerRepository hierarchy) {
       Properties props = new Properties();
   
  @@ -377,9 +359,9 @@
     }
   
     /**
  -   * Read configuration options from url <code>configURL</code>.
  -   *
  -   * @since 0.8.2
  +     Read configuration options from url <code>configURL</code>.
  +
  +     @since 0.8.2
      */
     public static void configure(java.net.URL configURL) {
       new PropertyConfigurator().doConfigure(
  @@ -387,35 +369,38 @@
     }
   
     /**
  -   * Read configuration options from <code>properties</code>. See [EMAIL PROTECTED]
  -   * #doConfigure(String, LoggerRepository)} for the expected format.
  -   */
  +     Read configuration options from <code>properties</code>.
  +
  +     See [EMAIL PROTECTED] #doConfigure(String, LoggerRepository)} for the expected 
format.
  +  */
     public static void configure(Properties properties) {
       new PropertyConfigurator().doConfigure(
         properties, LogManager.getLoggerRepository());
     }
   
     /**
  -   * Like [EMAIL PROTECTED] #configureAndWatch(String, long)} except that the 
default
  -   * delay as defined by [EMAIL PROTECTED] FileWatchdog#DEFAULT_DELAY} is used.
  -   *
  -   * @param configFilename A file in key=value format.
  -   */
  +     Like [EMAIL PROTECTED] #configureAndWatch(String, long)} except that the
  +     default delay as defined by [EMAIL PROTECTED] FileWatchdog#DEFAULT_DELAY} is
  +     used.
  +
  +     @param configFilename A file in key=value format.
  +
  +  */
     public static void configureAndWatch(String configFilename) {
       configureAndWatch(configFilename, FileWatchdog.DEFAULT_DELAY);
     }
   
     /**
  -   * Read the configuration file <code>configFilename</code> if it exists.
  -   * Moreover, a thread will be created that will periodically check if
  -   * <code>configFilename</code> has been created or modified. The period is
  -   * determined by the <code>delay</code> argument. If a change or file
  -   * creation is detected, then <code>configFilename</code> is read to
  -   * configure log4j.
  -   *
  -   * @param configFilename A file in key=value format.
  -   * @param delay The delay in milliseconds to wait between each check.
  -   */
  +     Read the configuration file <code>configFilename</code> if it
  +     exists. Moreover, a thread will be created that will periodically
  +     check if <code>configFilename</code> has been created or
  +     modified. The period is determined by the <code>delay</code>
  +     argument. If a change or file creation is detected, then
  +     <code>configFilename</code> is read to configure log4j.
  +
  +      @param configFilename A file in key=value format.
  +      @param delay The delay in milliseconds to wait between each check.
  +  */
     public static void configureAndWatch(String configFilename, long delay) {
       PropertyWatchdog pdog = new PropertyWatchdog(configFilename);
       pdog.setDelay(delay);
  @@ -423,9 +408,10 @@
     }
   
     /**
  -   * Read configuration options from <code>properties</code>. See [EMAIL PROTECTED]
  -   * #doConfigure(String, LoggerRepository)} for the expected format.
  -   */
  +     Read configuration options from <code>properties</code>.
  +
  +     See [EMAIL PROTECTED] #doConfigure(String, LoggerRepository)} for the expected 
format.
  +  */
     public void doConfigure(Properties properties, LoggerRepository hierarchy) {
       String value = properties.getProperty(LogLog.DEBUG_KEY);
   
  @@ -463,7 +449,7 @@
     }
   
     /**
  -   * Read configuration options from url <code>configURL</code>.
  +     Read configuration options from url <code>configURL</code>.
      */
     public void doConfigure(java.net.URL configURL, LoggerRepository hierarchy) {
       Properties props = new Properties();
  @@ -487,13 +473,14 @@
     // --------------------------------------------------------------------------
   
     /**
  -   * Check the provided <code>Properties</code> object for a [EMAIL PROTECTED]
  -   * org.apache.log4j.spi.LoggerFactory LoggerFactory} entry specified by
  -   * [EMAIL PROTECTED] #LOGGER_FACTORY_KEY}.  If such an entry exists, an attempt is
  -   * made to create an instance using the default constructor.  This instance
  -   * is used for subsequent Category creations within this configurator.
  -   *
  -   * @see #parseCatsAndRenderers
  +     Check the provided <code>Properties</code> object for a
  +     [EMAIL PROTECTED] org.apache.log4j.spi.LoggerFactory LoggerFactory}
  +     entry specified by [EMAIL PROTECTED] #LOGGER_FACTORY_KEY}.  If such an entry
  +     exists, an attempt is made to create an instance using the default
  +     constructor.  This instance is used for subsequent Category creations
  +     within this configurator.
  +
  +     @see #parseCatsAndRenderers
      */
     protected void configureLoggerFactory(Properties props) {
       String factoryClassName =
  @@ -509,25 +496,26 @@
     }
   
     /*
  -     void configureOptionHandler(OptionHandler oh, String prefix,
  -                                 Properties props) {
  -       String[] options = oh.getOptionStrings();
  -       if(options == null)
  -         return;
  -       String value;
  -       for(int i = 0; i < options.length; i++) {
  -         value =  OptionConverter.findAndSubst(prefix + options[i], props);
  -         LogLog.debug(
  -            "Option " + options[i] + "=[" + (value == null? "N/A" : value)+"].");
  -         // Some option handlers assume that null value are not passed to them.
  -         // So don't remove this check
  -         if(value != null) {
  -           oh.setOption(options[i], value);
  -         }
  -       }
  -       oh.activateOptions();
  -     }
  -   */
  +  void configureOptionHandler(OptionHandler oh, String prefix,
  +                              Properties props) {
  +    String[] options = oh.getOptionStrings();
  +    if(options == null)
  +      return;
  +
  +    String value;
  +    for(int i = 0; i < options.length; i++) {
  +      value =  OptionConverter.findAndSubst(prefix + options[i], props);
  +      LogLog.debug(
  +         "Option " + options[i] + "=[" + (value == null? "N/A" : value)+"].");
  +      // Some option handlers assume that null value are not passed to them.
  +      // So don't remove this check
  +      if(value != null) {
  +        oh.setOption(options[i], value);
  +      }
  +    }
  +    oh.activateOptions();
  +  }
  +  */
     void configureRootCategory(Properties props, LoggerRepository hierarchy) {
       String effectiveFrefix = ROOT_LOGGER_PREFIX;
       String value = OptionConverter.findAndSubst(ROOT_LOGGER_PREFIX, props);
  @@ -549,8 +537,8 @@
     }
   
     /**
  -   * Parse non-root elements, such non-root categories and renderers.
  -   */
  +     Parse non-root elements, such non-root categories and renderers.
  +  */
     protected void parseCatsAndRenderers(
       Properties props, LoggerRepository hierarchy) {
       Enumeration enum = props.propertyNames();
  @@ -587,7 +575,7 @@
     }
   
     /**
  -   * Parse the additivity option for a non-root category.
  +     Parse the additivity option for a non-root category.
      */
     void parseAdditivityForLogger(
       Properties props, Logger cat, String loggerName) {
  @@ -606,7 +594,7 @@
     }
   
     /**
  -   * This method must work for the root category as well.
  +     This method must work for the root category as well.
      */
     void parseCategory(
       Properties props, Logger logger, String optionKey, String loggerName,
  @@ -736,9 +724,8 @@
     }
   
     /**
  -   * Call [EMAIL PROTECTED] PropertyConfigurator#configure(String)} with the
  -   * <code>filename</code> to reconfigure log4j.
  -   */
  +     Call [EMAIL PROTECTED] PropertyConfigurator#configure(String)} with the
  +     <code>filename</code> to reconfigure log4j. */
     public void doOnChange() {
       new PropertyConfigurator().doConfigure(
         filename, LogManager.getLoggerRepository());
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to