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

#java #eclipse

#java #eclipse

Вопрос:

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

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

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

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

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

Комментарии:

1. 1) Возможно, вы должны использовать «Переменные ..» (например) C:test${???:??}. текст

2. Вот идея. Напишите свой собственный плагин eclipse (т. Е. кнопку cusotm), который присваивал бы случайное, но уникальное значение переменной (called ${NAME} ), а затем выполнял бы то же самое, что и run. Затем используйте $NAME в качестве значения для выходного файла. возможно?

Ответ №1:

Перейдите к запуску от имени и выберите Run Configurations -> Common и в стандартном режиме ввода и вывода вы также можете выбрать файл.

Комментарии:

1. Я нахожу абсолютно забавным, что 40 человек проголосовали за копирование-вставку из второй строки вопроса.

2. @AnthonyW Я думаю, это в основном потому, что людей приводит сюда заголовок вопроса, который звучит так: «Как мы можем перенаправить вывод eclipse в файл». Этот ответ фактически является ответом на вопрос заголовка.

3. Если вы не можете найти «Конфигурации запуска», используя Eclipse 4.4 (Luna), я открыл свою конфигурацию запуска (двойным щелчком мыши на сервере на вкладке Servers), нажал «Открыть конфигурацию lanuch», затем перешел на вкладку Common. В нижней половине этого диалогового окна есть раздел под названием «Стандартный ввод и вывод». Здесь я мог бы щелкнуть File и присвоить ему имя файла.

4. Подсказка: откройте терминал echo $TTY и укажите все, что он возвращает, в качестве вашего файла. Тогда терминал будет отражать то, что находится в вашей консоли Eclipse.

5. Что? Этот ответ неверен при внимательном прочтении вопроса спрашивающего.

Ответ №2:

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

 /tmp/FetchBlock-${current_date}.txt
  

current_date:

Возвращает текущее системное время в формате ГГГГМДД_ХММ. Необязательный аргумент может быть использован для предоставления альтернативного форматирования. Аргумент должен быть допустимым шаблоном для java.util.SimpleDateFormat.

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

Ответ №3:

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

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

Редактировать:

Из-за того, что это решение основано на PrintStream , мы можем включить автозапуск, но согласно документам:

Автозаполнение — логическое значение; если true, выходной буфер будет очищаться всякий раз, когда записывается массив байтов, вызывается один из методов println или записывается символ новой строки или байт (‘ n’)

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

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

Комментарии:

1. Похоже, вам также необходимо закрыть с помощью System.out.flush() , чтобы избежать возможного пропуска какого-либо вывода.

Ответ №4:

Для решения проблемы я использую переменную ${string_prompt}. При запуске приложения отображается диалоговое окно ввода. Я могу установить дату / время вручную в этом диалоговом окне.

  1. Переместите курсор в конец пути к файлу. введите описание изображения здесь

  2. Щелкните переменные и выберите string_prompt
    введите описание изображения здесь

  3. Выберите Применить и выполнить введите описание изображения здесь
    введите описание изображения здесь

Ответ №5:

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

System.setOut(новый поток печати(new FileOutputStream(«Путь к выходному файлу»))). Также вам необходимо закрыть или очистить переменную ‘out’ (System.out.close() или System.out.flush()), чтобы в конечном итоге не пропустить какой-либо вывод.

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