gpt4 book ai didi

spring - 从日志附加器类访问 spring bean

转载 作者:行者123 更新时间:2023-12-02 08:36:17 24 4
gpt4 key购买 nike

我有 log4j DailyRollingFileAppender 类,其中 setFile() 方法我需要检查数据库值来决定使用哪个文件进行日志记录。

DailyRollingFileAppender class 

public void setFileName()
{
isLoginEnabled = authenticationManager.checkLoginLogging();
}

这里的“authenticationManager”是用于使用 Spring 依赖注入(inject)功能进行数据库调用的类的对象。

spring-beans.xml
<bean id="dailyRollingFileAppender" class="com.common.util.DailyRollingFileAppender">
<property name="authenticationManager">
<ref bean="authenticationManager"/>
</property>
</bean>

<bean id="authenticationManager" class="com.security.impl.AuthenticationManagerImpl">
<property name="userService">
<ref bean="userService"/>
</property>
</bean>

现在,当我启动应用程序时,log4j 首先启动,并且由于 spring-beans 尚未调用,它会在方法 setFileName() 中抛出 NullPointerException。那么有没有办法可以调用“authenticationManager.checkLoginLogging();”来自 DailyFileAppender 类,以便当 log4j 加载时它应该能够获取数据库值?

最佳答案

晚了几年,但我希望这对某人有帮助。

我追求类似的功能 - 我有一个自定义附加程序,并且我想使用 Autowiring 的 bean 来使用我们构建的服务执行一些日志记录。通过使appender实现ApplicationContextAware接口(interface),并使我通常 Autowiring 的字段成为静态,我能够将spring控制的bean注入(inject)到log4j已实例化的appender实例中。

@Component
public class SslErrorSecurityAppender extends AppenderSkeleton implements ApplicationContextAware {

private static SecurityLogger securityLogger;

@Override
protected void append(LoggingEvent event) {
securityLogger.log(new SslExceptionSecurityEvent(SecurityEventType.AUTHENTICATION_FAILED, event.getThrowableInformation().getThrowable(), "Unexpected SSL error"));
}

@Override
public boolean requiresLayout() {
return false;
}

@Override
public synchronized void close() {
this.closed = true;
}


@Override
public void setApplicationContext(ApplicationContext applicationContext) {
if (applicationContext.getAutowireCapableBeanFactory().getBean("securityLogger") != null) {
securityLogger = (SecurityLogger) applicationContext.getAutowireCapableBeanFactory().getBean("securityLogger");
}
}
}

关于spring - 从日志附加器类访问 spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12275171/

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