Как мы можем перенаправить вывод программной консоли Java на несколько файлов?

Как мы можем перенаправить вывод консоли eclipse в файл? Я могу:

  • Run ConfigurationCommons -. > Select a file
  • Используйте System.setOut(PrintStream) и System.setErr(PrintStream).

Проблема с 1) заключается в том, что мне нужно записывать вывод консоли в разные файлы вместо одного файла.

Проблема с 2) заключается в том, что он хранит только вывод консоли, сгенерированный с помощью System.out.println() или stacktrace созданного исключения. Он не захватывает другие виды выходов, например. log4j предупреждения и т.д.

Как мы можем программно перенаправить вывод консоли на разные файлы?

Ответ 1

Перейдите в run as и выберите Run ConfigurationsCommon, а в стандартном вводе и выводе вы также можете выбрать файл.

Ответ 2

Вы можете использовать "переменную" внутри выходного имени файла, например:

/tmp/FetchBlock-${current_date}.txt

текущая_дата:

Возвращает текущее системное время, отформатированное как yyyyMMdd_HHmm. Дополнительный аргумент может использоваться для обеспечения альтернативного форматирования. Аргумент должен быть допустимым для java.util.SimpleDateFormat.

Или вы также можете использовать system_property или env_var, чтобы указать что-то динамическое (либо нужно указать в качестве аргументов)

Ответ 3

Вы можете установить выход System.out программно, выполнив:

System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("/location/to/console.out")), true));

Edit:

В связи с тем, что это решение основано на PrintStream, мы можем включить autoFlush, но в соответствии с docs:

autoFlush - логическое; если true, выходной буфер будет сброшен всякий раз, когда записывается массив байтов, один из методов println вызывается или символ новой строки или байта ('\n') записывается

Итак, если новая строка не написана, запомните System.out.flush() вручную.

(Спасибо, Роберт Тупело-Шнек)

Ответ 4

Мы можем сделать это, установив переменную класса System следующим образом:

System.setOut(новый PrintStream (новый FileOutputStream ( "Путь к выходному файлу" ))). Также вам нужно закрыть или сбросить переменную "out" (System.out.close() или System.out.flush()), чтобы вы не потеряли некоторый результат.

Источник: http://xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html