2013-04-14 46 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時,這指明流應該打開追加模式。

2

append mode只需打開你的日誌文件中,像下面:

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

它創建一個文件輸出流寫入到指定File對象表示的文件。如果第二個參數爲true,則字節將寫入文件的末尾而不是開頭。將創建一個新的FileDescriptor對象來表示此文件連接。