一尘不染

如何使用属性文件设置Java日志记录?(java.util.logging)

java

我有一个愚蠢的Java日志记录问题:我正在从我的应用程序配置文件中加载日志记录配置-
但在读取文件后,它只是不记录任何内容(这看起来很像您在网上可以找到的示例,除了其他应用程序配置-
删除此设置也无济于事。“正在初始化…”日志行似乎很好,但是“启动应用程序”和任何其他消息既未记录到控制台,也从未创建过日志文件。我在这里想念什么?

记录器代码如下所示:

...
Logger log = Logger.getLogger("myApp");
log.setLevel(Level.ALL);
log.info("initializing - trying to load configuration file ...");

Properties preferences = new Properties();
try {
    FileInputStream configFile = new FileInputStream("/path/to/app.properties");
    preferences.load(configFile);
    LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException ex)
{
    System.out.println("WARNING: Could not open configuration file");
    System.out.println("WARNING: Logging not configured (console output only)");
}
log.info("starting myApp");
...

这是配置文件:

appconfig1 = foo
appconfig2 = bar

# Logging
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL

# File Logging
java.util.logging.FileHandler.pattern = %h/myApp.log
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level = INFO

# Console Logging
java.util.logging.ConsoleHandler.level = ALL

阅读 205

收藏
2020-09-08

共1个答案

一尘不染

好吧,第一个直觉在这里:

handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL

Java prop文件解析器并不是那么聪明,我不确定它会处理这个问题。但我会再去看一下文档…。

同时,请尝试:

handlers = java.util.logging.FileHandler
java.util.logging.ConsoleHandler.level = ALL

更新资料

不,嗯,需要更多的咖啡。没关系。

虽然我想得更多,但是请注意,您可以使用Properties中的方法来加载和打印属性文件:可能值得编写一个最小的程序来查看java认为该文件读取了什么内容。


另一个更新

这行:

    FileInputStream configFile = new FileInputStream("/path/to/app.properties"));

有一个额外的末尾。它不会编译。确保您正在使用自己认为的类文件。

2020-09-08