我正在尝试为我的应用程序设置记录器,我想通过为此项目指定的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的格式吗?
答案 0 :(得分:0)
所以我无法重现您的问题。
Test.java:
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
logger.properties:
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class Test {
private static Logger LOGGER;
public static void main(String[] args) {
InputStream loggerProps = Test.class.getResourceAsStream("/logger.properties");
try {
LogManager.getLogManager().readConfiguration(loggerProps);
LOGGER= Logger.getLogger(Test.class.getName());
LOGGER.info("hey");
} catch (SecurityException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
控制台:
handlers= java.util.logging.ConsoleHandler.level= INFO
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] [%4$7s] %5$s %n
我还验证了更改格式会更改控制台消息格式。
您应验证: 1.您的进口是正确的 2.您的logger.properties位于源文件夹中
祝你好运。
答案 1 :(得分:0)
我设法解决了这个问题。似乎问题出在创建一个新的ConsoleHandler(我在设置记录程序属性之前已初始化的其他类中做了)。这是我的意思:
public final class Test {
public static void main(String[] args) {
Logger LOGGER = Logger.getLogger(Test.class.getName());
try {
// ConsoleHandler handler = new ConsoleHandler();
InputStream loggerProps = new FileInputStream(new File("logger.properties"));
LogManager.getLogManager().readConfiguration(loggerProps);
LOGGER.info("hey");
} catch (SecurityException | IOException e) {
e.printStackTrace();
}
}
}
如果您取消注释一条注释行,则记录器格式将不起作用。在Java 9或10中,它可以正常工作。