当前默认全局日志记录级别在 JRE_HOME/lib/logging.properties 文件中设置为 INFO。
我从命令行运行以下命令来覆盖并将级别设置为“FINE”:
mvn test -Dtest=ABC -Djava.util.logging.ConsoleHandler.level=FINE
并且,我在代码中使用以下内容:
logger.fine("Logging works for fine");
上述消息不会打印在输出中。
如果我将其更改为以下行,则打印成功。
logger.info("Logging works for fine");
我错过了什么?
最佳答案
命令开关-Djava.util.logging.ConsoleHandler.level=FINE
只是添加了一个system property入口。日志记录 API 不会使用或读取此信息。
相反,所有日志记录属性均由 LogManager 管理。
这是一个独立的程序,向您展示 LogManager
如何更改设置:
public class LogManagerTest {
public static void main(String[] arg) throws IOException {
read(LogManager.getLogManager(), create());
Handler h = new ConsoleHandler();
System.out.println(h.getLevel());
h.close();
}
private static Properties create() {
Properties props = new Properties();
props.setProperty("java.util.logging.ConsoleHandler.level",
"FINE");
return props;
}
private static void read(LogManager manager, Properties props) throws IOException {
final ByteArrayOutputStream out = new ByteArrayOutputStream(512);
props.store(out, "No comment");
manager.readConfiguration(new ByteArrayInputStream(out.toByteArray()));
}
}
就像 @Andreas 指出的那样,您将使用调整后的参数和 set the system property 创建一个新的属性文件。让 LogManager
使用新的属性文件和您所需的设置。
关于java - 如何从命令行参数设置 java.util.logging.ConsoleHandler.level?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414378/