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/[email protected]/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 <[email protected]> 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: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to