4

I couldn't find anywhere how to specify constants in log4j.xml. For example, I have this constant in my log4j.properties:

#Log directory
dal.log.dir=/var/log/pojodal/
# Log filename
dal.log.file=pojodal.log

And I use these constants as follows, in other parts of the properties file:

log4j.appender.DRFA1.File=${dal.log.dir}/${dal.log.file}

How to achieve the same behavior in log4j.xml?

Hari Menon
  • 33,649
  • 14
  • 85
  • 108

2 Answers2

10

You can convert your complete log4j.properties using this online service, where you can paste your log4j.properties, press convert and copy your new log4j.xml:

http://log4j-props2xml.appspot.com/

If that webapp is offline ... you can also start it in your own servlet container ... you find downloads and sources here:

https://github.com/jroyals/log4j-properties-converter/

Use of variables in log4j.xml:

This is explained in an answer to another question ... using XML internal entities here and using Java System Properties here.

Community
  • 1
  • 1
Jörg
  • 2,434
  • 23
  • 37
2

You can set the log file location and name as a parameter element in the log4J xml

<param name="File" value="C:\\logs\\application\\ApplicationLog.log" />

Example file below:

<log4j:configuration>
    <appender name="STDOUT" class="org.apache.log4j.RollingFileAppender">
        <param name="File"     value="C:\\logs\\application\\ApplicationLog.${user.name}.log" />
        <param name="MaxFileSize" value="5000KB" />
        <param name="MaxBackupIndex" value="10" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
        value="[%d{yyyy-MMM-dd HH:mm:ss}] [%t] %-5p %c{1}: %m %n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="FATAL"/>
        </filter>
    </appender>

    <root>
        <level value="all" />
        <appender-ref ref="STDOUT"/>
    </root>
</log4j:configuration>
Steve
  • 363
  • 2
  • 11
  • But these are meant for params that come with the appender only right? What I need is custom variables, because our log4j.properties files tends to get messy, so we wanted to keep all variables at the top – Hari Menon Sep 14 '11 at 11:00
  • Then I think you'll need to set these outside the log4j.xml file. You'll need a separate properties file and use System.setProperty before Log4J gets configured. Then you can use them as ${prop1} throughout the log4J.xml – Steve Sep 14 '11 at 11:09