Как установить системное свойство перед тем, как приложение, развернутое с помощью 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>
Другие вопросы по тегам