2014-12-11 2 views
1

Я использую файл log4j.xml. У меня две среды, а именно: тест &. Единственная разница в log4j для теста и живого - это уровни (INFO-live, DEBUG-тест). Поэтому я сохранил общий log4j.xml для обоих env и сделал уровень как value = $ {loglevel}. Я определил отдельный live -log4j.properties, который содержит loglevel=INFO. также для теста. Моя идея состоит в том, что если я построю jar для live, то loglevel следует выбрать из файла live -log4j.properties. Если для тестовой сборки, то из test-log4j.properties.Как получить динамическое значение из файла .properties для log4j.xml

Здесь мой запрос: я делаю правильные вещи? будет ли log4j.xml выбирать значения из соответствующего файла * .properties?

Я использую весенний каркас. Я упомянул много вещей, но ничего не имеет к этому отношения. Я добавил эти файлы свойств в spring.xml (не уверен, что он работает) У меня нет клиентской возможности для тестирования этого приложения.

Моя log4j версия: log4j 1.x

ответ

3

Вот пост, который объясняет, как: log4j configuration in applicationContext - forum.spring.io

можно упростить, что

applicationContext.xml:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>test-log4j.properties</value> 
      <value>live-log4j.properties</value> 
     </list> 
    </property> 
</bean> 

<bean id="log4jDirectConfigurer" class="my.commons.logging.Log4jDirectConfigurer"> 
    <property name="location" value="classpath:log4j.xml"/> 
    <property name="loglevelValue" value="${logging.level}"/> 
</bean> 

Log4jDirectConfigurer .java:

package my.commons.logging; 

import java.io.FileNotFoundException; 

import org.springframework.beans.factory.InitializingBean; 
import org.springframework.util.Log4jConfigurer; 

public class Log4jDirectConfigurer implements InitializingBean 
{ 
    private String location; 
    private String loglevelKey = "webapp.logLevel"; 

    public void setLocation(String location){ 
     this.location = location; 
    } 

    public void setLoglevelValue(String loglevel){ 
     String value = System.getProperty(loglevelKey); 
     System.setProperty(loglevelKey, loglevel); 
    } 

    public void afterPropertiesSet() { 
     if(location == null){ 
      return; 
     } 

     try { 
      Log4jConfigurer.initLogging(location); 
     } catch (FileNotFoundException e) { 
      System.out.println(location + ": File not found"); 
     } 
    } 
} 

log4j.xml:

<root> 
    <level value="${webapp.logLevel}" /> 
</root> 

live-log4j.properties:

logging.level=INFO 

тест-log4j.propertie:

logging.level=DEBUG 
+0

Можно без создания Log4jDirectConfigurer.java? – SuRa

+0

Вы можете создавать системные переменные из операционной системы. 'export webapp.logLevel = INFO' Заполнители в Log4j пытаются получить доступ к свойствам Системы. – bodyjares

Смежные вопросы