将可配置的FileHandler添加到java.util.logging.Logger

时间:2017-11-02 13:14:29

标签: java spring-boot logging static

我们有一个静态的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'。

1 个答案:

答案 0 :(得分:0)

正在发生的事情是静态块在加载属性之前执行。

您需要将静态块移动到@PostConstruct方法,以便所有injected values are present。然后查找您的property values from within that @PostConstruct method.