2015-06-12 5 views
0

Я бы хотел, чтобы консоль отображала вывод, но также сохраняла его в текстовом файле в виде журнала. Есть какой-либо способ сделать это? Я попытался сделать это:Как сохранить вывод консоли в текстовый файл в определенном каталоге?

PrintStream printStream = new PrintStream(new FileOutputStream(locations[0][0] + "-" + locations[0][1] + "-output.txt")); 
System.setOut(printStream); 

Но это не отображает вывод в консоль больше, и она сохраняет его в каталоге проекта. Есть ли способ сделать то и другое?

+1

Написать 'PrintStream' реализации, который регистрирует в двух местах. –

+1

http://stackoverflow.com/q/1356706/438992 –

+0

@Victor Как вы думаете, что он использует? 'System.setOut (printStream);' выглядит довольно похоже на ваше предложение. –

ответ

1

Вам необходимо использовать поток, который записывает в два потока назначения (файл и stdio). Например, можно использовать Apache's TeeOutputStream:

// Directory to save log files in 
File logDir = new File("/var/log/myapp"); 
// Name of log file 
String logFileName = locations[0][0] + "-" + locations[0][1] + "-output.txt"; 
// Actual log file 
File logFile = new File(logDir, logFileName); 

// File stream 
OutputStream fileStream = new FileOutputStream(logFile); 
// Stdout 
OutputStream stdioStream = System.out; 
// A stream redirecting output to both supplied streams 
OutputStream combinedStream = new TeeOutputStream(stdioStream, fileStream); 
// Finally use the resulting stream 
System.setOut(new PrintStream(combinedStream)); 

Другой вариант (из сферы JAVA) заключается в использовании * NIX tee инструмент:

java -cp ... com.package.MyClass | tee /var/log/myapp/mylogfile.txt 
+0

Хорошие предложения. @RoboticR: Помните, что стандартный вывод можно перенаправить из командной строки, возможно, нет необходимости программировать этот – Victor

+0

@Victor Thanks. О перенаправлении stdio: Я думаю, что я рассказал об этом с помощью команды 'tee'. –

+0

Спасибо! Это сработало для меня. Теперь есть способ установить местоположение файла? –

Смежные вопросы