Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheLog4j在Spring中调用getLogger()后向根记录器添加一个appender_Java_Spring_Dynamic_Log4j_Rollingfileappender - Fatal编程技术网

Java ApacheLog4j在Spring中调用getLogger()后向根记录器添加一个appender

Java ApacheLog4j在Spring中调用getLogger()后向根记录器添加一个appender,java,spring,dynamic,log4j,rollingfileappender,Java,Spring,Dynamic,Log4j,Rollingfileappender,我使用的是SpringBoot,我有两个独立的组件。一个组件支持应用程序的数据库配置属性,并使用从数据库中提取的属性初始化Appender。然后,其他组件只需像往常一样为静态记录器调用getLogger() 目前,Spring似乎正在首先初始化应用程序配置组件,因此如果它没有首先初始化,我无法观察到它的行为。我的问题是,如果先初始化其他bean,那么在运行时,绑定到根日志的appender是否会应用于它们,即使它们的记录器是在appender附加到根日志之前创建的 因此,示例代码: @组件 甲级

我使用的是SpringBoot,我有两个独立的组件。一个组件支持应用程序的数据库配置属性,并使用从数据库中提取的属性初始化Appender。然后,其他组件只需像往常一样为静态记录器调用getLogger()

目前,Spring似乎正在首先初始化应用程序配置组件,因此如果它没有首先初始化,我无法观察到它的行为。我的问题是,如果先初始化其他bean,那么在运行时,绑定到根日志的appender是否会应用于它们,即使它们的记录器是在appender附加到根日志之前创建的

因此,示例代码:

@组件
甲级{
@施工后
私有void configureSystem(){
EnhancedPatternLayout patternLayout=新的EnhancedPatternLayout();
patternLayout.setConversionPattern(“%d{HH:mm:ss}%-5p[%t]:%m%n”);
DailyRollingFileAppender fileAppender=新的DailyRollingFileAppender(patternLayout,“/logs/default.log”,“.”yyyy-MM-dd”);
setAppend(true);
setName(“DefaultAppender”);
fileAppender.setThreshold(Level.WARN);
fileAppender.activeOptions();
LogManager.getRootLogger().addAppender(fileAppender);
}
}
@组成部分
B类{
专用静态最终记录器Logger=LogManager.getLogger(B.class);
公共无效剂量测定法(){
logger.info(“我做了点什么!”);
}
}

在加载所有内容之前,类B不会“doSomething”,但我想知道是否会首先实例化类B,这是否会影响任何内容。显然,没有办法告诉Spring首先实例化哪个bean,所以我不能保证配置会按照我需要的方式进行,但是Spring现在先实例化这个bean,所以我无法测试它。我会遇到问题吗?

似乎Spring boot先加载A类,然后加载B类。如果先加载B类,则会抛出“log4j:警告找不到记录器的附加器”。我认为您可以在@SpringBootApplication注释类中初始化记录器,或者使用将自动加载的log4j.properties文件。

它目前正在首先加载它们,但我已经了解到,我不能保证它会首先加载。此外,我不能使用log4j属性文件或@springbootplication注释类,因为我需要根据业务需求使用这个特定类进行加载。