[prev in list] [next in list] [prev in thread] [next in thread] 

List:       log4j-user
Subject:    Re: log4j 1.2.15 DOMConfigurator.subst
From:       Maarten Bosteels <mbosteels.dns () gmail ! com>
Date:       2010-04-13 14:15:32
Message-ID: i2o5e87acee1004130715t959aa0fdo17404c666dd1ab0e () mail ! gmail ! com
[Download RAW message or body]


The problem with system properties is that they are shared by all webapps
running inside the same tomcat instance. (I believe Jetty uses different sys
props per webapp).

http://www.mail-archive.com/log4j-user@logging.apache.org/msg10597.html

Maybe someone should file a RFE.

Below is the class that we use to overcome this limitation:

Maarten
=====================================
package org.apache.log4j.xml;

import java.net.URL;
import java.util.Properties;

import org.apache.log4j.LogManager;

/**
 * Class for configuring log4j from an xml file, resolving ant style
placeholders from the given Properties object.
 *
 * This class has to be in the "org.apache.log4j.xml" package because it
accesses a package-private field in
 *  org.apache.log4j.xml.DOMConfigurator
 *
 */
public class PropertyDomConfigurator {

  /**
   * configure log4j from an xml file, resolving ant style placeholders from
the given Properties object
   * @param url URL to the xml config
   * @param properties used for resolving placeholders
   */
  public static void configure(final URL url, Properties properties) {
    DOMConfigurator configurator = new DOMConfigurator();
    configurator.props = new Properties(properties);
    configurator.doConfigure(url, LogManager.getLoggerRepository());
  }

}



On Sun, Apr 11, 2010 at 6:33 PM, Jacob Kjome <hoju@visi.com> wrote:

> 
> Could you be running into?...
> https://issues.apache.org/bugzilla/show_bug.cgi?id=43325
> 
> That said, you realize that you can just set system properties for this,
> right? So given...
> 
> <param name="File" value="${log.dir}/mylog.log"/>
> 
> You can set...
> 
> -Dlog.dir=/some/path/to/log/directory
> 
> 
> You should make sure that the path exists.  At least in older versions,
> Log4j wouldn't create this for you.  That might have been changed in newer
> versions, but I wouldn't count on it.
> 
> 
> Jake
> 
> 
> 
> On 4/9/2010 2:43 AM, Camer38 wrote:
> 
> > 
> > Any chance for a help or at lease link to working example of
> > DOMConfigurator.subst
> > 
> > 
> > 
> > 
> > I try to use DOMConfigurator.subst to change dynamically in Java code
> > location of the output logging file. See log4j.xml below.
> > 
> > The following code is called in main method to set up file location:
> > 
> > private static void setLogging(final String logDirectory, final String
> > logFileName) {
> > Properties props = new Properties();
> > props.put("dir.log", logDirectory);
> > props.put("file.name", logFileName);
> > String s3 = DOMConfigurator.subst("${dir.log}", props);
> > String s4 = DOMConfigurator.subst("${file.name}", props);
> > }
> > 
> > It does not work for me because I get following error:
> > 
> > log4j:ERROR setFile(null,true) call failed.
> > java.io.FileNotFoundException: \ (The system cannot find the path
> > specified)
> > at java.io.FileOutputStream.openAppend(Native Method)
> > at java.io.FileOutputStream.<init>(FileOutputStream.java:177)
> > at java.io.FileOutputStream.<init>(FileOutputStream.java:102)
> > at org.apache.log4j.FileAppender.setFile(FileAppender.java:290)
> > at
> > org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:194)
> > at
> > org.apache.log4j.FileAppender.activateOptions(FileAppender.java:164)
> > at
> > org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:257)
> > at
> > 
> > org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:285)
> > at
> > 
> > org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:171)
> > at
> > 
> > org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:184)
> >  at
> > 
> > org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:502)
> >  at
> > org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:471)
> > at
> > org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:921)
> > at
> > org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:790)
> > at
> > org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:696)
> > at
> > 
> > org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471)
> >  at org.apache.log4j.LogManager.<clinit>(LogManager.java:125)
> > at org.apache.log4j.Logger.getLogger(Logger.java:118)
> > at
> > 
> > curam.tools.upgradehelper.SampleJavaSourceMigrationTool.<clinit>(SampleJavaSourceMigrationTool.java:36)
> >  
> > Could you give me a tip what am I missing, please?
> > 
> > Marcin
> > 
> > log4j.xml
> > 
> > <?xml version="1.0" encoding="UTF-8"?>
> > <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
> > <log4j:configuration
> > debug="null"
> > xmlns:log4j="http://jakarta.apache.org/log4j/"
> > threshold="null"
> > 
> > > 
> > > 
> > <appender
> > class="org.apache.log4j.RollingFileAppender"
> > name="LogFileAppender"
> > > 
> > 
> > 
> > 
> > 
> > <layout class="org.apache.log4j.PatternLayout">
> > 
> > </layout>
> > </appender>
> > 
> > <!-- Loggers  -->
> > <root>
> > <level value="DEBUG"/>
> > <appender-ref ref="CONSOLE"/>
> > <appender-ref ref="LogFileAppender"/>
> > </root>
> > </log4j:configuration>
> > 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
> 
> 



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic