Как установить системное свойство перед тем, как приложение, развернутое с помощью Mule MMC, инициализирует свои настройки log4j?
Я хочу использовать файл log4j.properties (он будет называться по-другому) вне моего развернутого приложения Mule. Приложение разворачивается с использованием сервера MMC. В тестовой среде моей IDE, если я установил аргумент VM -Dlog4j.configuration=file:///c:/esb/etc/log4jconfig/log4j.myApp.properties
, указывая на внешний файл свойств log4j, все работает.
Но получить то же приложение для загрузки внешнего файла свойств log4j при развертывании в промежуточной среде Mule MMC пока не получалось.
Плагин Maven Surefire будет работать, но это для тестовой среды.
Я пытался:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<goals>
<goal>set-system-properties</goal>
</goals>
<configuration>
<properties>
<property>
<name>my.property.name</name>
<value>my.property.value</value>
</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>
Я также попробовал:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<!--<mainClass>${exec.main-class}</mainClass>-->
<systemProperties>
<systemProperty>
<value>file:///c:/esb/etc/log4jconfig/log4j.myApp.properties</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
Я протестировал эти конфигурации в IDE, а также упаковал и развернул на сервере Staging Mule MMC безуспешно. Я также попытался указать семь различных соглашений об именах для значения свойства, которое Log4J преобразует в URL при инициализации.
Мы используем log4j-1.2.16. Глядя на руководство log4j по адресу http://logging.apache.org/log4j/1.2/manual.html, в разделе " Процедура инициализации по умолчанию", мне сказали, что установка log4j.configuration
Системное свойство переопределяет расположение файла свойств журнала, и оно делает это, как я уже сказал, когда я изменяю аргументы ВМ в тестах IDE.
Мне нужен способ заставить Mule загрузить это системное свойство перед инициализацией log4j.
Развернутое приложение Mule в MMC использует тот же автономный экземпляр Mule с несколькими другими развернутыми приложениями, и я не хочу менять местоположение журнала для всех этих приложений в одном месте. Каждое приложение должно иметь свое собственное.
1 ответ
Вы можете достичь этого, добавив следующий bean-компонент в вашу конфигурацию:
<spring:bean id="log4jInitialization"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<spring:property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
<spring:property name="targetMethod" value="initLogging" />
<spring:property name="arguments">
<spring:list>
<spring:value>file:///c:/esb/etc/log4jconfig/log4j.myApp.properties</spring:value>
</spring:list>
</spring:property>
</spring:bean>