2013-04-14 3 views
2

У меня есть Java-программа, которая запускается каждые 10 минут. Я хочу, чтобы захватить журнал этого процесса, например, рассмотреть вопрос (что делает по существу моя программа):Перенаправление System.out и добавление к существующему файлу

public static void someFunction() 
{ 
    System.setOut(new PrintStream(LOG_DIR)); 
    System.out.append("whatever I am appending about my program") 
} 

В этом случае someFunction будет вызываться из main каждые 10 минут. Однако он всегда перезаписывает файл, указанный LOG_DIR. Я думаю, это потому, что он просто создает новый файл и сохраняет то, что ранее было в файле LOG_DIR. Таким образом, моя попытка добавить к концу файла является излишней.

  1. Как моя программа может записать в конец некоторого файла, когда функция вызывается каждые 10 минут?
+0

Использовать систему ведения журнала. Или используйте ['FileOutputStream'] (http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html#FileOutputStream (java.io.File,% 20boolean)). –

ответ

4

Лучшим решением было бы использовать одну из нескольких существующих фреймворков регистрации. Однако, если вы настаиваете на подвижном самостоятельно, вам необходимо добавить к вашему выходного файла, в отличие от его перезаписи:

System.setOut(new PrintStream(new FileOutputStream(LOG_DIR, true))); 

Обратите внимание, что логический аргумент FileOutputStream, это указывает, что поток должен быть открыт в append режим.

2

Просто откройте файл войти append mode, как следующее:

System.setOut(new PrintStream(new FileOutputStream(LOG_DIR, true))); 

Это создает выходной файловый поток для записи в файл, представленный указанный объект File. Если второй аргумент истинен, то байты будут записываться в конец файла, а не в начало. Для представления этого подключения к файлу создается новый объект FileDescriptor.

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