【发布时间】:2018-09-03 14:44:10
【问题描述】:
我正在尝试为我的应用程序设置一个记录器,我想通过为此项目指定的 logger.properties 文件来执行此操作。我使用以下代码进行设置:
InputStream loggerProps = getClass().getResourceAsStream("/logger.properties");
LogManager.getLogManager().readConfiguration(loggerProps);
该文件包含以下文本:
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL
java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] [%4$-7s] %5$s %n
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
#part about FileHandler omitted
问题是给定的格式根本不适用于记录的消息。但是,它只在 Java 8 中没有(也许更早的版本也没有,没有检查过)。当我在 Java 9 或 10 中尝试上述方法时,它工作得很好。
据我所知,文件已正确加载。在第一行去掉 ConsoleHandler 会导致日志不显示在控制台中。更改处理程序的级别也可以按预期工作。
如果我在设置属性后调用如下方法:
LogManager.getLogManager().getProperty("java.util.logging.SimpleFormatter.format")
它返回正确的格式字符串。
我试过将格式字符串放在双引号和单引号内,都不管用。
我做错了什么?问题出在哪里? Java版本不是9以下支持的格式吗?
【问题讨论】:
-
一般来说,您应该提供最少的代码来重现问题,如果可能的话,您得到的输出
-
第一个调用者的属性是loaded into a static field。一旦设置,图案就不能改变。因此,您必须注意在读取 logging.properties 之前加载模式的情况。