我正在尝试从配置文件中加载一些日志消息,但我仍然想通过 an 引用他们的名字,而不是在将他们的名字输入为senum
时打开自己的印刷错误。String
所以这是我的设置:
public class Log {
private static final Logger LOGGER = Logger.getLogger(Log.class);
private static final String MESSAGES_FILE_PATH = "conf/log_message.conf";
private static final Properties MESSAGES = new Properties();
static {
try {
MESSAGES.load(new FileInputStream(new File(MESSAGES_FILE_PATH)));
}
catch(IOException ioe) {
LOGGER.fatal("Unable to load log messages from file: " + MESSAGES_FILE_PATH, ioe);
}
}
public enum Message {
//Main
PROGRAM_EXIT,
THREAD_INTERRUPTED,
FATAL_TERMINATING_ERROR,
SHUTDOWN_HOOK_EXCEPTION,
IO_READ_ATTEMPT,
IO_READ_FAILURE,
IO_WRITE_ATTEMPT,
IO_WRITE_FAILURE,
IOEXCEPTION,
//...
private final String text;
private Message() {
text = MESSAGES.getProperty(name());
}
//...
}
}
我担心的是,可能存在一些边缘场景,其中静态初始化程序在s 初始化Log
之前没有运行。enum
我已经测试了代码,到目前为止它工作正常,而且,从逻辑上讲,我看不出静态初始化程序是如何不首先运行的(因为引用Message
必须通过Log
,例如Log.Message.IOEXCEPTION
)。不过,我对设置有点不安,不想给应用程序崩溃留下任何可能的漏洞。那么,这样安全吗?