log4j.xml配置的公共变量

我有这样的log4j.xml配置:

  ...  

但是我的文件的根目录对于很多appender是相同的。 有没有办法将“/ logs / custom /”定义为变量,并在我的所有appender中重用它。

谢谢,

肖恩

更新 :原始答案适用于Log4j 1.x.

Log4j 2.x对配置文件中的属性有更丰富的支持,请参阅Log4j手册,了解有关配置属性的信息 。

Log4j 1.x(原始答案):

使用log4j.xml时实现类似function的唯一方法是在启动时设置系统属性,然后从log4j.xml引用该属性。

在启动时,您可以设置系统属性:

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

或者在运行时以编程方式设置它(在初始化Log4j之前):

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

然后你可以像这样引用它:

   ...  

或者在属性文件中,如下所示:

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

来源:我从log4j xml配置中使用系统环境变量得到了这个答案的灵感。

此外,如果您在Tomcat下运行,您可以使用${catalina.home}变量,如下所示:

   ...  

在XML中也可以定义一个变量并在doc的其余部分重用它:

   ] > 

然后,将这个刚刚定义的变量称为&logHome;

  

那个怎么样?

(我相信我不久前在这个链接上了解了XML实体引用: http : //www.ibm.com/developerworks/xml/library/x-tipentref/index.html )

我不相信这可以使用XML配置,但它是在.properties文件配置中:

 mysubdir = /logs/custom ... log4j.appender.MyAppender.File = ${mysubdir}/my.log