春季环境特定的log4j配置

我使用传统的方式加载log4j.xml

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:conf/log4j.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

这工作正常,但现在我需要加载一个不同的log4j.xml文件,基于我在哪个环境中由环境变量/ jndi条目定义.所以我希望用新的弹簧3.1属性管理我可以改变这个至

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:conf/log4j-${ENV-NAME}.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

并且spring将在每个环境中加载正确的log4j文件,但这并不适用,因为在spring之前加载了web.xml.我遇到这种方法

<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
<property name="targetMethod" value="initLogging" />
<property name="arguments">
 <list>
  <value>log4j-${ENV-NAME}.xml</value>
 </list>
</property>
</bean>

所以基本上将log4j的配置移动到spring context文件而不是web.xml中.但是,由于某些原因,日志记录功能可以通过记录所有内容的方式启用.那么如何使用基于环境变量的不同log4j.xml文件,或者在servletcontextlistener中以编程方式加载它.

最佳答案
帮助adeelmahmood已经太晚了,但希望别人能从我的答案中受益.
事情是adeelmahmood是对的,这个配置:

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:conf/log4j-${ENV-NAME}.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

正在工作,但是:

> Log4jConfigListener应该在Web.xml中的ContextLoaderListener之前注册!
>您还必须记住,Log4jConfigListener假定展开的WAR文件.

然后,如果设置了ENV-NAME环境变量,它将按预期工作.

顺便说一下,${ENV-NAME}也可以在spring配置文件中使用!这不是一切…您也可以使用我们的env.property设置弹簧配置文件:

<context-param>
 <param-name>spring.profiles.active</param-name>
 <param-value>${ENV-NAME}</param-value>
</context-param>

这样可以设置log4jConfigLocation和spring配置文件,这两个配置文件都使用同一个env.变量.

BTW,以防万一:使用Maven配置文件为开发人员单独构建,测试和生产不是很好的做法.阅读例如http://java.dzone.com/articles/maven-profile-best-practices,并记住:“使用配置文件管理构建时变量,而不是运行时变量,而不是(具有RARE异常)的辅助版本的工件”.

转载注明原文:春季环境特定的log4j配置 - 代码日志