Java.util.logging.FileHandler в Java 8 не работает?
Сначала простой тестовый код:
package javaapplication23;
import java.io.IOException;
import java.util.logging.FileHandler;
public class JavaApplication23 {
public static void main(String[] args) throws IOException {
new FileHandler("./test_%u_%g.log", 10000, 100, true);
}
}
Этот тестовый код создает в Java 7 только один файл «test_0_0.log», независимо от того, как часто я запускаю программу. Это ожидаемое поведение, поскольку для параметра append в конструкторе установлено значение true.
Но если я запускаю этот пример в Java 8, при каждом запуске создается новый файл (test_0_0.log, test_0_1.log, test_0_2.log, ...). Я думаю, что это ошибка.
Имхо, связанное изменение в Java это:
@@ -413,18 +428,18 @@
// object. Try again.
continue;
}
- FileChannel fc;
+
try {
- lockStream = new FileOutputStream(lockFileName);
- fc = lockStream.getChannel();
- } catch (IOException ix) {
- // We got an IOException while trying to open the file.
- // Try the next file.
+ lockFileChannel = FileChannel.open(Paths.get(lockFileName),
+ CREATE_NEW, WRITE);
+ } catch (FileAlreadyExistsException ix) {
+ // try the next lock file name in the sequence
continue;
}
+
boolean available;
try {
- available = fc.tryLock() != null;
+ available = lockFileChannel.tryLock() != null;
// We got the lock OK.
} catch (IOException ix) {
// We got an IOException while trying to get the lock.
@@ -440,7 +455,7 @@
}
// We failed to get the lock. Try next file.
- fc.close();
+ lockFileChannel.close();
}
}
(В полном объеме:Набор изменений OpenJDK 6123: ac22a52a732c)
Я знаю, что FileHandler обычно закрывается Logmanager, но это не тот случай, если происходит сбой системы или приложения или процесс завершается. Вот почему у меня нет выражения «закрыть» в приведенном выше примере кода.
Теперь у меня есть два вопроса:
1) Каково ваше мнение? Это ошибка? (Почти ответил в следующих комментариях и ответах)
2) Знаете ли вы обходной путь для получения старого поведения Java 7 в Java 8? (Более важный вопрос ...)
Спасибо за ваши ответы.