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


161

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

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

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

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

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


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

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

Ответы:


176

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


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

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

1
Если вы не можете найти «Run Configurations», с помощью Eclipse 4.4 (Luna) я открыл свою конфигурацию запуска (дважды щелкнув по серверу на вкладке «Серверы»), нажал «Открыть конфигурацию lanuch», затем перешел на вкладку «Общие». , В нижней половине этого диалога есть раздел «Стандартный ввод и вывод». Здесь я мог бы щелкнуть Файл и дать ему имя файла.
Гай Шалнат

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

2
Какой? Этот ответ неверен при внимательном прочтении вопроса.
ComputerScientist

11

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

/tmp/FetchBlock-${current_date}.txt

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

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

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


8

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

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

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

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

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

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

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


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

1

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

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

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

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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.