Thomas Wiedmann | 20 Feb 13:35 2011
Picon
Picon

Setting properties for log4j.xml configuration file

Hello,

usually in flat plain text log4j.config files global system properties can 
be defined, which may be referenced in the configuration of different 
appenders, e. g.

log4j.logdir=C:/Data/logfiles
...
log4j.appender.MyAppender1.File=${log4j.logdir}/MyAppender1.log
...
log4j.appender.MyAppender2.File=${log4j.logdir}/MyAppender2.log

I found this is a very convenient way to define (and to administer) such 
parameters only once globally for the entire log configuration and to use it 
on several references as here in the appenders configuration.

How can such global system properties be defined in xml-based configuration 
files (log4j.xml)?
Where is it documented? I'd found no hint about it.

Thomas Wiedmann 
Christian Grobmeier | 20 Feb 15:49 2011
Picon

Re: Setting properties for log4j.xml configuration file

Hi,

actually you are right. I think we should improve our documentation here.
In meanwhile, please try this:
http://wiki.apache.org/logging-log4j/Log4jXmlFormat

Let me know if this solves your problems.

Cheers
Christian

On Sun, Feb 20, 2011 at 1:35 PM, Thomas Wiedmann <th.wm <at> gmx.de> wrote:
> Hello,
>
> usually in flat plain text log4j.config files global system properties can
> be defined, which may be referenced in the configuration of different
> appenders, e. g.
>
> log4j.logdir=C:/Data/logfiles
> ...
> log4j.appender.MyAppender1.File=${log4j.logdir}/MyAppender1.log
> ...
> log4j.appender.MyAppender2.File=${log4j.logdir}/MyAppender2.log
>
> I found this is a very convenient way to define (and to administer) such
> parameters only once globally for the entire log configuration and to use it
> on several references as here in the appenders configuration.
>
> How can such global system properties be defined in xml-based configuration
> files (log4j.xml)?
(Continue reading)

Curt Arnold | 21 Feb 05:30 2011
Picon

Re: Setting properties for log4j.xml configuration file

XML entity references can be used for that purpose and are defined in the XML Recommendation (http://www.w3.org/TR/xml/#sec-references).

<!DOCTYPE log4j:configuration
[
<!ENTITY logdir "c:/data/logfiles">
]>
<log4j:configuration>
...
<param name="file" value="&logdir;"/>
...
</log4j:configuration>

On Feb 20, 2011, at 6:35 AM, Thomas Wiedmann wrote:

> Hello,
> 
> usually in flat plain text log4j.config files global system properties can be defined, which may be
referenced in the configuration of different appenders, e. g.
> 
> log4j.logdir=C:/Data/logfiles
> ...
> log4j.appender.MyAppender1.File=${log4j.logdir}/MyAppender1.log
> ...
> log4j.appender.MyAppender2.File=${log4j.logdir}/MyAppender2.log
> 
> I found this is a very convenient way to define (and to administer) such parameters only once globally for
the entire log configuration and to use it on several references as here in the appenders configuration.
> 
> How can such global system properties be defined in xml-based configuration files (log4j.xml)?
> Where is it documented? I'd found no hint about it.
(Continue reading)

Jacob Kjome | 22 Feb 03:05 2011

Re: Setting properties for log4j.xml configuration file


Curt,

Maybe I'm missing something, but how does using XML entity refs do anything for
referencing Java system properties?  The simple answer is that Log4j XML config
files support exactly the same syntax as properties files, e.g.,....

    	<param name="File" value="${log4j.logdir}/MyAppender1.log"/>

I don't recall whether/where it's specifically documented or not, but it works.

Jake

On 2/20/2011 10:30 PM, Curt Arnold wrote:
> XML entity references can be used for that purpose and are defined in the XML Recommendation (http://www.w3.org/TR/xml/#sec-references).
> 
> <!DOCTYPE log4j:configuration
> [
> <!ENTITY logdir "c:/data/logfiles">
> ]>
> <log4j:configuration>
> ...
> <param name="file" value="&logdir;"/>
> ...
> </log4j:configuration>
> 
> On Feb 20, 2011, at 6:35 AM, Thomas Wiedmann wrote:
> 
>> Hello,
>>
(Continue reading)

Curt Arnold | 22 Feb 05:54 2011
Picon

Re: Setting properties for log4j.xml configuration file

I read the question as "how do I define parameters once" in an XML configuration file and the use of system
properties was just a convenient way of doing that in property file configurations.  The property file
example included setting log4j.logdir in the file and I'm not aware of any capability in XML
configuration files to set system properties.  If the property was already set externally, then you could
use the same type of expressions as in the example.

On Feb 21, 2011, at 8:05 PM, Jacob Kjome wrote:

> 
> Curt,
> 
> Maybe I'm missing something, but how does using XML entity refs do anything for
> referencing Java system properties?  The simple answer is that Log4j XML config
> files support exactly the same syntax as properties files, e.g.,....
> 
>    	<param name="File" value="${log4j.logdir}/MyAppender1.log"/>
> 
> I don't recall whether/where it's specifically documented or not, but it works.
> 
> 
> Jake
> 
> On 2/20/2011 10:30 PM, Curt Arnold wrote:
>> XML entity references can be used for that purpose and are defined in the XML Recommendation (http://www.w3.org/TR/xml/#sec-references).
>> 
>> <!DOCTYPE log4j:configuration
>> [
>> <!ENTITY logdir "c:/data/logfiles">
>> ]>
>> <log4j:configuration>
(Continue reading)

Thomas Wiedmann | 22 Feb 07:59 2011
Picon
Picon

Re: Setting properties for log4j.xml configuration file

> ... and I'm not aware of any capability in XML configuration files to set 
> system properties.
Yes, exactly this is my main question (How to set a property, which can be 
referenced in the xml config elsewhere? It works in flat log4j text config 
files) - it's still open. Unfortunately I didn't even found a hint about it 
in the link http://wiki.apache.org/logging-log4j/Log4jXmlFormat.

Thomas Wiedmann

On Feb 21, 2011, at 8:05 PM, Jacob Kjome wrote:

>
> Curt,
>
> Maybe I'm missing something, but how does using XML entity refs do 
> anything for
> referencing Java system properties?  The simple answer is that Log4j XML 
> config
> files support exactly the same syntax as properties files, e.g.,....
>
>    <param name="File" value="${log4j.logdir}/MyAppender1.log"/>
>
> I don't recall whether/where it's specifically documented or not, but it 
> works.
>
>
> Jake
>
> On 2/20/2011 10:30 PM, Curt Arnold wrote:
>> XML entity references can be used for that purpose and are defined in the 
(Continue reading)

Thomas Wiedmann | 13 Mar 10:25 2011
Picon
Picon

Re: Setting properties for log4j.xml configuration file

Meanwhile I found the solution (for all, who'll might have the same question 
in future:) by defining an XML entity declaring the logfiles directory (or 
any other parameter, required, to be referenced in the log4j.xml) - Sample:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" [<!ENTITY log4j:logDir 
"C:/MyProject/MyLogs">]>

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
   <appender name="fileout" 
class="org.apache.log4j.DailyRollingFileAppender">
     <param name="file" value="&log4j:logDir;/mytests.log"/>

Thomas Wiedmann
...
Jacob Kjome | 22 Feb 16:43 2011

Re: Setting properties for log4j.xml configuration file


You're right, I did miss something.  I didn't see "log4j.logdir" being set 
within the file in the original example.  Sorry about that.  Your original 
answer appears to be right on the money.

Jake

On Mon, 21 Feb 2011 22:54:31 -0600
 Curt Arnold <carnold <at> apache.org> wrote:
> I read the question as "how do I define parameters once" in an XML 
>configuration file and the use of system properties was just a convenient way 
>of doing that in property file configurations.  The property file example 
>included setting log4j.logdir in the file and I'm not aware of any capability 
>in XML configuration files to set system properties.  If the property was 
>already set externally, then you could use the same type of expressions as in 
>the example.
> 
> 
> 
> On Feb 21, 2011, at 8:05 PM, Jacob Kjome wrote:
> 
>> 
>> Curt,
>> 
>> Maybe I'm missing something, but how does using XML entity refs do anything 
>>for
>> referencing Java system properties?  The simple answer is that Log4j XML 
>>config
>> files support exactly the same syntax as properties files, e.g.,....
>> 
(Continue reading)


Gmane