如何在Mule MMC部署的应用程序初始化其log4j设置之前设置系统属性?

时间:2014-01-10 15:36:46

标签: logging log4j mule

我想在我部署的Mule应用程序外部使用log4j.properties文件(命名方式不同)。该应用程序使用MMC服务器进行部署。在我的IDE测试环境中,如果我设置了一个VM arg -Dlog4j.configuration=file:///c:/esb/etc/log4jconfig/log4j.myApp.properties,指向外部log4j属性文件,它就可以工作。

但是,当部署到Mule MMC登台环境时,获取相同的应用程序以加载外部log4j属性文件尚未成功。

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。查看http://logging.apache.org/log4j/1.2/manual.html上的log4j手册,在默认初始化过程下,我被告知设置log4j.configuration系统属性将覆盖日志属性文件的位置,并且正如我所说,当我在IDE测试中更改VM args时,这样做。

我需要一种方法让mule在初始化log4j之前加载该系统属性。

MMC中部署的Mule应用程序与其他几个已部署的应用程序共享相同的Mule独立实例,我不想将所有这些应用程序的日志位置更改为同一位置。每个应用都必须有自己的。

1 个答案:

答案 0 :(得分:0)

您可以通过将以下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>