我们有一个静态的java.util.logging.Logger变量作为myLogger。 目前,它只打印到控制台,所以我们必须添加FileHandler。 该项目基于配置文件,因此根据编译时指定的配置文件,将加载相应的application- {profile} .properties文件。此文件具有每个配置文件的不同日志文件位置。
如何使用application.properties中的值实例化FileHandler?
代码段:
private static String logFileName;
@Value("${loggingSftp.logFileName}")
public void setLogFileName(String logFileName) {
SftpConfiguration.logFileName = logFileName;
}
private static final Logger LOGGER = Logger.getLogger(SftpConfiguration.class.getPackage().getName());
private static FileHandler fileHandler;
static {
try {
LOGGER.info("log file name: " + logFileName);
fileHandler = new FileHandler(LoggingFileHandler.getLogFileName()
+ LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd")));
LOGGER.addHandler(fileHandler);
} catch (IOException e) {
e.printStackTrace();
}
}
现在,当静态块初始化并添加fileHandler时,logFileName为'null'。
答案 0 :(得分:0)
正在发生的事情是静态块在加载属性之前执行。
您需要将静态块移动到@PostConstruct方法,以便所有injected values are present。然后查找您的property values from within that @PostConstruct method.