spring 环境特定的 log4j 配置

2023-12-23

我正在使用传统方式加载 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 条目定义的..所以我希望通过新的 spring 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 文件,但这可能不起作用,因为 web.xml 在 spring 之前加载。我遇到了这个方法

<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 上下文文件中,而不是 web.xml 中。但这也不起作用,因为某种原因,日志记录以记录所有内容的方式启用。那么如何根据环境变量使用不同的 log4j.xml 文件或在 servletcontextlistener 中以编程方式加载它。


现在帮助阿迪尔·马哈茂德已经太晚了,但希望其他人能从我的回答中受益。 阿迪尔·马哈茂德是对的,这个配置:

<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 来设置 spring 配置文件:

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

通过这种方式,您可以使用同一个环境设置 log4jConfigLocation 和 spring 配置文件。多变的。

顺便说一句,以防万一:使用 Maven 配置文件为开发、测试和生产进行单独的构建并不是一个好的做法。阅读例如。http://java.dzone.com/articles/maven-profile-best-practices http://java.dzone.com/articles/maven-profile-best-practices并记住:“使用配置文件来管理构建时变量,而不是运行时变量,也不是(极少数例外)工件的替代版本”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring 环境特定的 log4j 配置 的相关文章

随机推荐