我想在我部署的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独立实例,我不想将所有这些应用程序的日志位置更改为同一位置。每个应用都必须有自己的。
答案 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>