spring mvc为每个构建环境加载不同的log4j文件

时间:2014-02-04 05:35:59

标签: spring spring-mvc log4j

我正在使用spring mvc 3.今天我发现了spring配置文件以及如何在web.xml中设置它们。我正在从应用程序属性文件加载我的配置文件但是无法使用log4j实现相同的功能,以便根据我是为dev构建还是为prod构建来加载不同的log4j文件。

这是我对spring.profiles.active的看法。

  1. 名为env.properties ..

    的属性文件

    spring.profiles.active = dev的

  2. 实现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);
           ...
           }
    
  3. 我的web.xml中的以下内容

     <context-param>
     <param-name>spring.profiles.active</param-name>
     <param-value>${spring.profiles.active}</param-value>
     </context-param>
    
  4. 问题:现在我尝试加载基于env的不同日志文件,如此...

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:/log4j-${spring.profiles.active}.xml</param-value>
    </context-param>
    

    目标是加载log4j-dev.xml,但这不起作用。

    有人可以帮我这个吗?

    感谢

1 个答案:

答案 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

这确实意味着您将使用系统属性而不是属性文件中的属性,但它可能是实现您所追求的目标的一种方式。