java 1.8.0_192 的 JavaFX 日志记录

JavaFX logging for java 1.8.0_192

我想最大化来自 JavaFX 的日志记录。

我找到并将其设置为 JVM 的标志: -Djavafx.pulseLogger=真 (产生大量信息)

我正在尝试使用 log4j:

以下选项有效吗?他们似乎没有在我的输出文件中产生任何东西?

<logger name="com.sun.javafx">
    <level value="info" />
</logger>

<logger name="javafx">
    <level value="info" />
</logger>

JavaFX 与所有 Java SE 一样,不使用 Log4J,而是使用 Java logging system。 Log4J 配置不会影响 JavaFX 的日志记录。

您可以使用 LogManager.getLogManager()。updateConfiguration 读取具有覆盖日志记录配置的属性文件:

try (InputStream loggingProperties =
    MyApplication.class.getResource("logging.properties")) {

    LogManager.getLogManager().updateConfiguration(loggingProperties);
}

(请注意,readConfiguration 替换 整个日志记录配置,而 updateConfiguration 修改您对配置的自定义。)

如果您只想更改 JavaFX 的日志记录,您可以改为执行以下操作:

private static final Logger javafxLogger = Logger.getLogger("javafx");
static {
    javafxLogger.setLevel(Level.FINEST);
}

Logger 需要保留在一个字段中,否则将被垃圾收集(快速)并且自定义将丢失。

无论您使用上述哪种方法,仅设置Logger 的级别是不够的。 Handlers 也有自己的级别,默认设置为 Level.INFO。

解决此问题的最简单方法是设置所有处理程序的级别:

for (Handler handler : Logger.getLogger("").getHandlers()) {
    handler.setLevel(Level.ALL);
}

感谢上面 VGR 的回答,这就是我在详细级别上让 javafx 注销所做的工作:

private static final java.util.logging.Logger javafxLogger = 
    java.util.logging.Logger.getLogger("javafx");   

javafxLogger.setLevel(Level.FINEST);

FileHandler fh = new FileHandler("MyJavaFX.log", (1048576 * 30), 1000);

fh.setFormatter(new SimpleFormatter());
javafxLogger.addHandler(fh);