我正在使用spring mvc 3.今天我发现了spring配置文件以及如何在web.xml中设置它们。我正在从应用程序属性文件加载我的配置文件但是无法使用log4j实现相同的功能,以便根据我是为dev构建还是为prod构建来加载不同的log4j文件。
这是我对spring.profiles.active的看法。
名为env.properties ..
的属性文件spring.profiles.active = dev的
实现ApplicationContextInitializer的AppInitializer类。
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);
...
}
我的web.xml中的以下内容
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>${spring.profiles.active}</param-value>
</context-param>
问题:现在我尝试加载基于env的不同日志文件,如此...
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:/log4j-${spring.profiles.active}.xml</param-value>
</context-param>
目标是加载log4j-dev.xml,但这不起作用。
有人可以帮我这个吗?
感谢
答案 0 :(得分:2)
Log4j支持log4j.xml文件中的变量替换。您可以根据特定于环境的系统属性替换日志目录。这意味着您可以将文件名保持为:
<param-value>classpath:/log4j.xml</param-value>
然后你可以参数化文件中的目录:
<param name="File" value="${log4j_dir}/filename.log" />
然后,对于每个环境中的每个应用服务器,您都可以设置相应的文件夹路径。例如。对于开发者:
-Dlog4j_dir=/path/on/dev
这确实意味着您将使用系统属性而不是属性文件中的属性,但它可能是实现您所追求的目标的一种方式。