java - 如何从命令行参数设置 java.util.logging.ConsoleHandler.level?

标签 java logging command-line java.util.logging

当前默认全局日志记录级别在 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/

相关文章:

java - 将用Java编写的.jar导入Android,noClassDefFoundError

java - 在 Java 中是否有使用方法引用 JAVA 覆盖方法的缩写形式?

java - Flyway 中的 DDL + DML(推荐方法)

java - 通过电子邮件将 log4j 错误发送给不同的组

java - 如何将 java.util.logging.Logger 覆盖到我的私有(private)记录器?

java - Android 图库 View 在单个屏幕上显示两个 View 。

logging - 如何控制 QuickFix 打印输出

linux - 找不到命令行标记

c# - 使用 MsBuild 命令行执行单元测试

shell - 如何排除要删除的文件/文件夹