У меня многопоточная Java-программа и (на основе этого ответа ) мне удалось перенаправить вывод консоли каждого потока в другой файл / местоположение, используя следующий код:
if (!SystemOutputHijacker.isInstalled()) {
System.out.println("Installing system output hijacker");
SystemOutputHijacker.install();
}
И затем после запуска каждого потока вызывается следующий код:
FileOutputStream fileOutputStream = new FileOutputStream(dir, true);
PrintStream printStream = new PrintStream(fileOutputStream);
if (!SystemOutputHijacker.isRegistered()) {
System.out.println("Registering system output hijacker for thread: " + Thread.currentThread().getName());
SystemOutputHijacker.register(printStream);
}
Как и ожидалось, этот код правильно перенаправляет вывод консоли на другое назначение для каждого потока. Однако я также хочу отобразить операторы System.out
всех потоков в консоли. При использовании предыдущего кода консоль пуста.
Единственный связанный с этим вопрос, который я обнаружил в SO, это здесь , но я считаю, что это решает проблему перенаправления вывода на два внешних файла 1) без поддержки отдельного потока вывода для каждого потока 2) без печати также всех операторов System.out
на самой консоли.
По сути, мне нужно, чтобы каждый поток печатал свои собственные операторы System.out
в отдельный файл / местоположение, но продолжал печатать все операторы System.out
на консоли.
Спасибо!