我正在尝试在运行时设置Java util日志配置文件,以避免将其设置为VM参数。
但这并不起作用。每当我尝试重新读取配置时,日志记录就完全停止了。
请参阅以下代码片段:
如果我不使用任何VM参数运行该类,则输出如下:
如您所见,仅记录SEVERE级别的日志,因为这是JRE logging.properties 的默认设置。调用LogManager#readConfiguration()不会改变任何内容。但是,在尝试从我的logging.properties读取配置时,绝对没有记录任何内容。使用
现在请看下一行输出,当我使用VM属性
正如您所看到的,SEVERE和FINEST级别都已记录,并以不同的格式记录。 两者都在我的自定义logging.properties中指定。 但是在调用LogManager#readConfiguration()后,日志记录就停止了! 这与上面的示例不同,我不明白原因。 此外,与上面的示例一样,调用LogManager#readConfiguration(InputStream)也无法正常工作。
那么问题出在哪里呢? 根据 javadoc,在运行时设置java.util.logging.config.file属性应该可以解决问题。并且我期望两个readConfiguration()方法都能正常工作。 那么问题出在哪里呢?
请参阅以下代码片段:
package test;
import java.io.FileInputStream;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class A {
private static final Logger LOGGER= Logger.getLogger(A.class.getName());
public static void main(String[] args) throws Exception {
System.out.println("--- start");
LOGGER.log(Level.SEVERE, "SEVERE 1");
LOGGER.log(Level.FINEST, "FINEST 1");
LogManager.getLogManager().readConfiguration();
LOGGER.log(Level.SEVERE, "SEVERE 2");
LOGGER.log(Level.FINEST, "FINEST 2");
LogManager.getLogManager().readConfiguration(new FileInputStream("/tmp/logging.properties"));
LOGGER.log(Level.SEVERE, "SEVERE 3");
LOGGER.log(Level.FINEST, "FINEST 3");
System.out.println("--- end");
}
}
如果我不使用任何VM参数运行该类,则输出如下:
--- start
09.11.2012 09:59:25 test.A main
SCHWERWIEGEND: SEVERE 1
09.11.2012 09:59:25 test.A main
SCHWERWIEGEND: SEVERE 2
--- end
如您所见,仅记录SEVERE级别的日志,因为这是JRE logging.properties 的默认设置。调用LogManager#readConfiguration()不会改变任何内容。但是,在尝试从我的logging.properties读取配置时,绝对没有记录任何内容。使用
LogManager#readConfiguration(InputStream)
或设置java.util.logging.config.file
属性并调用LogManager#readConfiguration()
没有任何区别。现在请看下一行输出,当我使用VM属性
-Djava.util.logging.config.file=/tmp/logging.properties
运行相同的代码时:--- start
2012-11-09 10:03:44.0838 SEVERE [test.A#main()] - SEVERE 1
2012-11-09 10:03:44.0843 FINEST [test.A#main()] - FINEST 1
--- end
正如您所看到的,SEVERE和FINEST级别都已记录,并以不同的格式记录。 两者都在我的自定义logging.properties中指定。 但是在调用LogManager#readConfiguration()后,日志记录就停止了! 这与上面的示例不同,我不明白原因。 此外,与上面的示例一样,调用LogManager#readConfiguration(InputStream)也无法正常工作。
那么问题出在哪里呢? 根据 javadoc,在运行时设置java.util.logging.config.file属性应该可以解决问题。并且我期望两个readConfiguration()方法都能正常工作。 那么问题出在哪里呢?
readConfiguration()
方法似乎没有做它们应该做的事情。 - radlanreadConfiguration()
读取配置后,新的日志记录器配置将被使用。JDK 1.6.0_27. - Udo Klimaschewski