Можно ли написать тройник в пакете Windows или на Java?

У меня есть Java-программа, которую я запускаю в консоли Windows 7:

java -classpath classfolder mypackage.MyProgram

Эта программа работает очень долго. Время от времени он записывает вывод в консоль, используя System.out.println.

Можно ли направить его вывод на консоль и в файл журнала в режиме реального времени без изменения существующего кода Java?

Если Windows 7 не может этого сделать, возможно ли написать утилиту Tee на Java?

Это решается в Windows 8?

3 ответа

Решение

Чтобы сделать это "без изменения существующего Java-кода", вы можете написать другой класс-оболочку, который переназначает System.out соответственно, а затем вызывает существующий основной класс

package mypackage;
import java.io.*;
import org.apache.commons.io.output.*;

public class TeeWrapper {
  public static void main(String[] args) throws Exception {
    FileOutputStream logFile = new FileOutputStream("log.txt");
    try {
      System.setOut(new PrintStream(new TeeOutputStream(System.out, logFile)));
      MyProgram.main(args);
    } finally {
      logFile.close();
    }
  }
}

(используя TeeOutputStream из Apache commons-io).

Вы запускаете оболочку вместо исходного класса

java -classpath classfolder mypackage.TeeWrapper

tee Команда может помочь вам, но это команда Unix. Вы можете использовать этот пакетный файл как аналог tee,

Пример:

systeminfo | tee_nt.bat 1.txt

Это возможно, просто прочитайте из system.in и выведите как в system.out, так и в файл.

Другие вопросы по тегам