Я загружаю 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.