2011-03-17 48 views
0

我想記錄我的Java應用程序的日誌。 我創建了這個類:Java記錄器問題

public class Log { 

    final Logger logger = Logger.getLogger("DigiScope.log"); 

    public static void main(String[] args) { 
    } 

    public Log(String message) { 
     try { 
      // Create an appending file handler 
      boolean append = true; 
      FileHandler handler = new FileHandler("my.log", append); 

      // Add to the desired logger 
      Logger logger = Logger.getLogger("com.mycompany"); 
      logger.addHandler(handler); 
      logger.info(message); 

     } catch (IOException e) { 
     } 

    } 
} 

併爲每個按鈕我有一個這樣的代碼:

private void btnNewPatient ActionPerformed(java.awt.event.ActionEvent evt) { 
Log a = new Log("New Patient created"); 
} 

此代碼創建一個log.txt的,但只記錄第一個按鈕的點擊,其他人點擊其他按鈕不記錄。

你能幫我嗎?

謝謝。

+0

待辦事項你在其他按鈕上有一個處理程序,就像你在第一個按鈕上做的那樣?另外,第二塊中的代碼與源代碼中的完全相同嗎?這看起來不會編譯。 – justkt 2011-03-17 15:16:30

+0

你在使用java.util.logging嗎?無論如何,每次單擊按鈕時都不應創建並向記錄器添加處理程序。您應該添加處理程序一次(通過配置或代碼),並且每次單擊使用記錄器記錄消息。 – 2011-03-17 15:19:53

+0

這不是打算使用Logging API的方式。你應該在你的類中有一個'static final'成員字段'logger',從動作監聽器調用'logger.info',並且有一個logging.properties配置記錄的消息到文件中去。有沒有理由不堅持你的情況? – 2011-03-17 15:20:26

回答

2

在您的應用程序中創建專有的日誌記錄封裝沒有什麼意義 - java.util.logging已經是這樣一個封裝,所以我建議直接使用它。你應該在你的類創建日誌對象,然後登錄處理方法的東西中的消息是這樣的:

logger.info("New Patient created"); 

而且你應該使用相同的Logger實例整個類,而不是創建新實例的所有時間。標準的方法是每個類創建一個static final實例。

最好從配置文件配置日誌記錄,而不是從代碼配置。

我推薦通讀Java Logging Tutorial

0

我猜測它可能會記錄每次點擊,但是您將重新打開每個新日誌消息的文件,而不是附加到它。

1

彼得Török和StriplingWarrior是對他們的建議,使用日誌框架以正確的方式:的

logger.info("New Patient created"); 

,而不是創建每條語句一個新的記錄器。


但即使在您的構建中,您應該有一個包含所有日誌信息的日誌文件。 對於日誌構造函數的每次調用,都會創建一個新的my.log.X文件(X是一個數字)。從這時起,每個日誌語句都記錄在這個文件中。因此,如果您三次調用構造函數(消息:「first」,「second」,「third」),那麼您應該擁有文件:my.log,my.log.1。 my.log.2

  • my.log: 「第一」, 「第二」, 「第三」
  • my.log.1: 「第二」, 「第三」
  • my.log.2: 「第三」