Java 通过DI在Spring框架中正确使用LOG4J

Java 通过DI在Spring框架中正确使用LOG4J,java,spring,log4j,Java,Spring,Log4j,我试图将Log4j用作Spring框架的一部分, 据我所知,通过使用合适的bean 系统应该映射代码中可访问的单例实例 将日志记录深度自动映射到类时 类似于中Log4J的正常使用 Logger log=Logger.getLogger(getClass()) 我一直在使用下面的Springbean定义 <bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFa

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

类似于中Log4J的正常使用

Logger log=Logger.getLogger(getClass())

我一直在使用下面的Springbean定义

<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>

conf\log4j.xml
但是我无法将这个bean映射到给定类中的特定成员 我也无法通过@autowired使用它

如果有更好的方法集成Log4j和Spring,请告诉我

致意


Mark

您的问题的简短答案是log4j不友好

log4jconfig.initLogging()
方法有一个无效的返回值,因此没有什么可注入的。其思想是调用该方法,该方法引导log4j,然后像往常一样使用log4japi(使用
Logger.getLogger(getClass())

不过,您通常不会将
log4jconfig
配置为Springbean,但更常见的是,在应用程序启动期间,您会直接从自己的代码中调用它

如果这是一个webapp,那么Spring提供了更适合该环境的
log4jconfig
log4jwebconfig
log4jconfig


顺便说一句,2年前我提交了一份允许记录器自动连线的申请,最后它被标记为Spring3.1的补丁。霍瑞。

谢谢。希望你的建议在不久的将来得到实施。顺便说一句,我看到log5j找到了一个自动执行“Logger.getLogger(getClass())”的系统,希望Spring社区找到一个类似但更好的方法——log5j做了一些危险的事情来实现这一点