【发布时间】:2017-07-23 13:19:42
【问题描述】:
我正在使用 Spring Boot,并且我有两个单独的组件。一个组件支持应用程序的数据库配置属性,并使用从数据库中提取的属性初始化 Appender。然后其他组件只需像往常一样调用静态记录器的 getLogger()。
目前,Spring 似乎首先初始化应用程序配置组件,因此如果没有先初始化,我无法观察到该行为。我的问题是,是否应该先初始化其他 bean,绑定到根日志的附加程序是否会在运行时应用于它们,即使它们的记录器是在附加程序附加到根之前创建的?
所以示例代码:
@Component
class A {
@PostConstruct
private void configureSystem() {
EnhancedPatternLayout patternLayout = new EnhancedPatternLayout();
patternLayout.setConversionPattern("%d{HH:mm:ss} %-5p [%t]: %m%n");
DailyRollingFileAppender fileAppender = new DailyRollingFileAppender(patternLayout, "/logs/default.log", "'.'yyyy-MM-dd");
fileAppender.setAppend(true);
fileAppender.setName("DefaultAppender");
fileAppender.setThreshold(Level.WARN);
fileAppender.activeOptions();
LogManager.getRootLogger().addAppender(fileAppender);
}
}
@Component
class B {
private static final Logger logger = LogManager.getLogger(B.class);
public void doSomething() {
logger.info("I did something!");
}
}
在所有内容加载完成之前,B 类不会“做某事”,但我想知道 B 类是否会首先实例化,如果这会影响任何事情。显然没有办法告诉 Spring 首先实例化哪个 bean,所以我不能保证配置会按照我需要的方式进行,但是 Spring 现在首先实例化这个,所以我无法测试它。我会遇到问题吗?
【问题讨论】:
标签: java spring dynamic log4j rollingfileappender