【发布时间】:2018-03-20 07:15:03
【问题描述】:
我有一个关于 java.util.logging 的问题。这主要是关于理解它,因为我已经让它工作了。但我仍然不太确定为什么它有效。
所以我有一个大型且非常古老的应用程序,其中包含许多没有任何同步的线程(不是我发明的,我只是可怜的维护者)。我将专有日志记录移植到 java.util.logging。在启动时我读取了一个配置文件:
String logname = Ini.getProperty("BoxLog", "boxlog.properties");
logManager = LogManager.getLogManager();
try {
logManager.readConfiguration(new FileInputStream(logname));
LOGGER.info("Read log configuration file " + logname);
} catch (SecurityException e) { ... }
我用调试器逐步完成了它,这里一切正常。也不例外,读取了正确的文件,一切似乎都正常。但是日志处理程序的格式没有更新。所以这里的日志行是以系统范围配置中默认给出的格式输出的。
由于线程多,在另一个使用默认配置的对象中有一些日志输出,它们是在我的配置被读取之前输出的。删除这些日志后,一切正常。
文档中说 readConfiguration():重新初始化日志记录属性并重新读取日志记录配置。所以我假设在这几行日志记录发生之后,然后在读取正确的配置之后,每个进一步的日志记录都将采用给定的格式。但事实并非如此。任何类中的每一次进一步日志记录仍采用默认格式。在我看来,在读取配置时,任何已经实例化的记录器及其处理程序都没有重新初始化。
这就是问题所在。这实际上是如何工作的?我在这里错过了什么吗?还是我在这里错误地理解了什么?还是文档中有错误?或者还有什么?
【问题讨论】:
标签: java logging java.util.logging