gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:36 25 4
gpt4 key购买 nike

我正在尝试使用 Log4j 作为 Spring 框架的一部分,据我所知,通过使用适当的 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

最好的问候

标记

最佳答案

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

Log4jConfigurer.initLogging() 方法有一个无效的返回值,所以没有什么可注入(inject)的。这个想法是您调用该方法,它引导 log4j,然后像往常一样使用 Log4j API(使用 Logger.getLogger(getClass()))。

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

如果这是一个 Web 应用程序,那么 Spring 会提供更适合该环境的 Log4jConfigurer 替代方案(Log4jWebConfigurerLog4jConfigListener)。

顺便说一下,2 年前我提交了一个 feature request允许 Autowiring 记录器,它最终被标记为 Spring 3.1 的修复。万岁。

关于java - 通过 DI 在 Spring Framework 中正确使用 LOG4J,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com