在Spring中通过JNDI控制日志文件位置?

时间:2010-11-22 21:54:37

标签: java xml spring logging log4j

我有一个使用SLF4J日志记录外观的Java Web应用程序。到目前为止,我们使用下面的Log4J实现(虽然我们正在考虑切换到Logback)。 Log4J当前通过log4j.xml配置文件进行配置,该文件位于类路径的根目录中。

无论如何,我们使用JNDI配置应用程序的其他方面,因此我非常熟悉如何设置它并将字符串从JNDI拉入Spring配置文件。

但是,我无法弄清楚如何在Spring配置文件中创建Log4J appender。更好的是,可以通过Spring完全配置Log4J并完全跳过log4j.xml配置文件吗?我希望我不必以编程方式执行此操作。

我发现了一个名为Log4jWebConfigurer的Spring类,但是这需要WAR运行爆炸(如果我能帮助它就不希望这样),并且日志文件也位于web-app目录中(绝对不要不想要的。)

1 个答案:

答案 0 :(得分:2)

首先通过JNDI获取主目录:

<jee:jndi-lookup id="myAppHome" jndi-name="myAppHome" />

然后以下列方式在Spring Expression Language语句中使用该bean:

<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>#{ myAppHome + '/conf/log4j.xml'}</value>
        </list>
    </property>
</bean>