Ведение журнала JavaFX для Java 1.8.0_192 - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу максимизировать ведение журнала из JavaFX.

Я нашел и установил это как флаг для JVM: -Djavafx.pulseLogger = верно (который производит много информации)

Я пытаюсь использовать log4j:

Допустимы ли указанные ниже варианты? Кажется, они ничего не генерируют в моем выходном файле?

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

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

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Благодаря ответу 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); 
0 голосов
/ 06 ноября 2018

JavaFX, как и все Java SE, не использует Log4J, но вместо этого использует систему ведения журнала Java . Конфигурация 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 недостаточна. Обработчики также имеют свои собственные уровни, и они по умолчанию имеют значение Level.INFO.

Самый простой способ решить эту проблему - установить все уровни обработчиков:

for (Handler handler : Logger.getLogger("").getHandlers()) {
    handler.setLevel(Level.ALL);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...