общая переменная для конфигурации log4j.xml - PullRequest
11 голосов
/ 30 сентября 2011

У меня есть конфигурация log4j.xml:

<appender name="MyAppender"class="org.apache.log4j.DailyRollingFileAppender">   
     <param name="File"     value="/logs/custom/my.log"/>
...  
 </appender>

Однако корневой каталог моего файла одинаков для многих appender. Есть ли способ определить "/ logs / custom /" как переменную и повторно использовать его во всех моих приложениях.

Спасибо

Sean

Ответы [ 3 ]

14 голосов
/ 30 сентября 2011

ОБНОВЛЕНИЕ : Оригинальный ответ относится к Log4j 1.x

Log4j 2.x имеет гораздо более богатую поддержку свойств в файле конфигурации, см. Руководство Log4j о Конфигурация со свойствами .

Log4j 1.x (оригинальный ответ):

Единственный способ добиться чего-то похожего при использовании log4j.xml - установить системное свойство при запуске и затем ссылаться на него из вашего log4j.xml.

При запуске вы устанавливаете системное свойство:

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

Или установить его программно во время выполнения (до инициализации Log4j):

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

Тогда вы можете сослаться на это так:

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

Или в файле свойств, например:

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

Источник: я получил вдохновение для этого ответа от Использование системных переменных среды в конфигурации xml log4j .

Также, если вы работаете под Tomcat, вы можете использовать переменную ${catalina.home}, например:

<appender name="MyAppender"class="org.apache.log4j.DailyRollingFileAppender">   
     <param name="File" value="${catalina.home}/logs/my.log"/>
     ...  
</appender>
14 голосов
/ 12 мая 2012

В XML также возможно определить переменную и повторно использовать ее в остальной части документа:

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

Затем обратитесь к только что определенной переменной, как & logHome;

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

Как насчет этого?

(мне кажется, я узнал о ссылках на сущности XML некоторое время назад по этой ссылке: http://www.ibm.com/developerworks/xml/library/x-tipentref/index.html)

6 голосов
/ 30 сентября 2011

Я не верю, что это возможно при использовании конфигурации XML, но это в конфигурации файла .properties:

mysubdir = /logs/custom
...
log4j.appender.MyAppender.File = ${mysubdir}/my.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...