我使用Spring引导和我有两个独立的组件后添加一个appender至根记录。一个组件支持应用程序的数据库配置属性,并使用从数据库中提取的属性初始化Appender。其他组件然后像平常一样调用getLogger()作为静态记录器。阿帕奇log4j的春季
目前,似乎春天首先初始化应用程序配置组件,所以我没能遵守的行为如果不首先初始化。我的问题是,如果其他bean首先被初始化,那么绑定到根日志的appender是否会在运行时应用它们,即使它们的logger是在appender连接到根之前创建的?
所以示例代码:
@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类不会“DoSomething的”,直到一切都已经加载之后,但我如果B类被第一次实例化是否会造成任何影响琢磨。显然,没有办法告诉Spring哪个bean首先实例化,所以我不能确保配置将按照我需要的方式进行,但Spring现在先实例化这个,所以我无法测试它。我会遇到问题吗?
它目前正在加载他们,但我读过,我不能*保证*它首先加载。此外,我不能使用log4j属性文件或@SpringBootApplication注释类,因为我需要使用此特定类来加载业务需求。 –