common variable for log4j.xml configuration

醉酒当歌 提交于 2019-12-03 05:57:17
Neeme Praks

UPDATE: The original answer applies to Log4j 1.x

Log4j 2.x has much richer support for properties in configuration file, see the Log4j manual about Configuration with properties.

Log4j 1.x (the original answer):

The only way to achieve something similar when you are using log4j.xml is to set a system property at startup and then reference that from your log4j.xml.

At startup, you set your system property:

java -Dlog_dir=/var/logs/custom     com.yourorg.yourapp.Main

Or set it programmatically at runtime (before initializing Log4j):

System.setProperty("log_dir", "/var/logs/custom")

Then you can reference it like this:

<appender name="MyAppender"class="org.apache.log4j.DailyRollingFileAppender">   
     <param name="File" value="${log_dir}/my.log"/>
     ...  
</appender>

Or in properties file, like this:

log4j.appender.MyAppender.File = ${log_dir}/my.log

Source: I got inspiration for this answer from Using system environment variables in log4j xml configuration.

Also, if you are running under Tomcat, you can use ${catalina.home} variable, like this:

<appender name="MyAppender"class="org.apache.log4j.DailyRollingFileAppender">   
     <param name="File" value="${catalina.home}/logs/my.log"/>
     ...  
</appender>

It is possible in XML as well to define a variable and reuse it in the rest of the doc:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" [
  <!ENTITY logHome "/logs/folder1/folder2">
]
>

Then, refer to this variable just defined, as &logHome;

<param name="File" value="&logHome;/folder3/my.log"/>

How about that?

(I believe I learnt about XML entity references some time ago at this link: http://www.ibm.com/developerworks/xml/library/x-tipentref/index.html)

I don't believe this is possible using XML configuration, but it is in a .properties file configuration:

mysubdir = /logs/custom
...
log4j.appender.MyAppender.File = ${mysubdir}/my.log
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!