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

2022-08-31 11:43:53

我有一个愚蠢的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

答案 1

您可以通过命令行设置日志记录配置文件:

$ java -Djava.util.logging.config.file=/path/to/app.properties MainClass

这种方式似乎更干净,更易于维护。


答案 2

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

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

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

同时,请尝试:

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

更新

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

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

另一个更新

此行:

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

有一个额外的末端。它不会编译。确保您正在处理您认为是类文件。


推荐