通过DI在Spring Framework中正确使用LOG4J

时间:2010-01-31 13:13:17

标签: java spring log4j

我试图将Log4j用作Spring Framework的一部分, 据我所知,通过使用适当的bean 系统应该映射代码中可访问的单例实例 同时将记录深度自动映射到类

中正常使用Log4J类似

Logger log = Logger.getLogger(getClass());

我一直在使用以下Spring 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>conf\log4j.xml</value>
        </list>
    </property>
</bean>

但我无法将此bean映射到给定类中的特定成员 我也无法通过@autowired

使用它

如果有更好的方法来集成Log4j和Spring

,请告诉我

最好的问候

标记

1 个答案:

答案 0 :(得分:6)

你的问题的简短回答是log4j不是DI友好的。

Log4jConfigurer.initLogging()方法有一个void返回值,因此无需注入。我的想法是你调用那个引导log4j的方法,然后像往常一样使用Log4j API(使用Logger.getLogger(getClass()))。

但是,您通常不会将Log4jConfigurer配置为Spring bean,但通常在应用程序启动期间直接从您自己的代码调用它。

如果这是一个webapp,那么Spring提供了更适合该环境的Log4jConfigurer的替代方案(Log4jWebConfigurerLog4jConfigListener)。

顺便提一下,2年前我提交了一个feature request来允许记录器自动装配,它最终被标记为Spring 3.1的修复程序。 Horray。