一尘不染

用Spring初始化Log4J吗?

spring

我有一个使用Spring的Log4jConfigurer类初始化我的Log4J日志工厂的Web应用程序。基本上,它使用不在类路径中的配置文件来初始化Log4J。

这是配置:

<bean id="log4jInitializer" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" depends-on="sbeHome">
    <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>

但是,在应用程序启动时出现此错误:

log4j:WARN No appenders could be found for logger

大量的Spring应用程序上下文初始化消息被打印到控制台。我认为这是因为Spring在有机会初始化记录器之前正在进行初始化应用程序的工作。如果很重要,我将在Log4J之上使用SLF4J。

有什么办法可以使Log4jConfigurer成为第一个初始化的bean?还是有其他解决方法?


阅读 347

收藏
2020-04-13

共1个答案

一尘不染

你可以在web.xml而不是spring-context.xml中配置Log4j侦听器

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/classes/log4j.web.properties</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

因此,在Spring开始之前就结束了。

2020-04-13