2014-02-04 3 views
0

Я использую весенний mvc 3. Сегодня я обнаружил весенние профили и как их можно установить в вашем web.xml. Я загружаю свой профиль из файла свойств приложения, но не могу добиться того же самого с log4j, чтобы загрузить другой файл log4j на основе того, создаю ли я для dev или для создания для prod.Весна mvc Загрузка различных файлов log4j для каждой среды сборки

Вот что у меня есть для spring.profiles.active.

  1. свойства файл с именем env.properties ..

    spring.profiles.active = DEV

  2. AppInitializer класс, который реализует ApplicationContextInitializer.

    public void initialize(ConfigurableApplicationContext applicationContext) { 
        ConfigurableEnvironment environment = applicationContext.getEnvironment(); 
        try { 
    
         ResourcePropertySource env = new ResourcePropertySource("classpath:env.properties"); 
         String profile = (String)env.getProperty("spring.profiles.active");   
         environment.getPropertySources().addFirst(env); 
         ... 
         } 
    
  3. Следующая в моем web.xml

    <context-param> 
    <param-name>spring.profiles.active</param-name> 
    <param-value>${spring.profiles.active}</param-value> 
    </context-param> 
    

Проблема: Теперь я пытаюсь загрузить другой файл журнала, основанный на окр как так ...

<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>classpath:/log4j-${spring.profiles.active}.xml</param-value> 
</context-param> 

Где задача загрузить log4j-dev.xml, но это не сработает.

Может ли кто-нибудь помочь мне с этим, пожалуйста?

благодаря

+0

или, альтернативно, как я могу просто изменить каталог журнала в моем log4j, используя значение из файла свойств? – Richie

ответ

2

Log4j поддерживает подстановку переменных внутри файла log4j.xml. Вы можете заменить каталог журнала на основе свойства системы, специфичного для среды. Это будет означать, что вы могли бы сохранить имя файла, как:

<param-value>classpath:/log4j.xml</param-value> 

Тогда вы могли бы параметризировать каталог внутри файла:

<param name="File" value="${log4j_dir}/filename.log" /> 

А затем для каждого сервера приложений в каждой среде, вы можете установить соответствующий путь к папке. Например. для разработчика:

-Dlog4j_dir=/path/on/dev 

Это означает, что вы бы использовать свойство системы, а не свойство в файл свойств, но это может быть один из способов достижения того, что вы после этого.

+0

спасибо. Итак, log4j не позволит вам использовать свойство приложения? – Richie

+0

Насколько мне известно. Я всегда использовал способ использования системной собственности. Существует еще одна альтернатива, которая заключается в использовании свойства '-Dlog4j.configuration = file:/path/to/log4j.xml', которое позволяет вам переключать весь файл с помощью системного свойства, а не значений внутри данного файла. –

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