[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