From Gossip@Openhome

Java Gossip: 簡介 Logging

程式中不免會出現錯誤,當錯誤發生時,您可以使用System.err.println()或是 System.out.println()在主控台 (Console)顯示訊息給使用者,如果是在視窗程式中,可能是使用訊息方塊,如果是在網頁程式中,則顯示一個錯誤訊息頁面,除了提供錯誤訊息之外,您還可能想將錯誤訊息以某種方式儲存下來,以供使用者或是程式人員debug時使用。

在Java中的java.util.logging套件提供了一系列的logging工具,如果您只是要簡單的記錄一些訊息,就可以使用 它,這些logging工具在J2SE 1.4之後加入了Java標準中,不必額外配備logging元件就可以運行於標準的Java平台上是它的好處。

像是簡單的主控台訊息顯示或是記錄檔案的輸出,java.util.logging下都提供了一些預設的工具,您不必親自撰寫這些工具。

來看一個簡單的例子,假設您的程式在啟動時必須提供參數,如果使用者沒有提供參數,則必須顯示警示訊息:

  • LoggingDemo.java
package onlyfun.caterpillar;

import java.util.logging.*;

public class LoggingDemo {
public static void main(String[] args) {
Logger logger = Logger.getLogger("LoggingDemo");

try {
System.out.println(args[0]);
}
catch(ArrayIndexOutOfBoundsException e) {
logger.warning("沒有提供執行時的引數!");
}
}
}

執行結果:
2005/2/3 上午 10:50:54 onlyfun.caterpillar.LoggingDemo main
警告: 沒有提供執行時的引數! 


如上所示的,您簡單的透過Logger的靜態方法getLogger()取得Logger物件,之後就可以運用它的方法進行訊 息輸出,預設是從主控台輸出訊息,除了您提供的訊息之外,Logger還自動幫您收集了相關的訊息,像是類別與套件名稱,執行該段程式的執行緒名稱以及訊 息產生的時間等,這比下面這個程式所提供的訊息豐富的多了。
  • LoggingDemo.java
package onlyfun.caterpillar;

public class LoggingDemo {
public static void main(String[] args) {
try {
System.out.println(args[0]);
}
catch(ArrayIndexOutOfBoundsException e) {
System.err.println("沒有提供執行時的引數!");
}
}
}

您不用親自實作,直接使用 java.util.logging 工具,就可以擁有一些預設的記錄功能,作為中大型系統來說,java.util.logging 工具可能不足,但作為一個簡單的記錄工具,java.util.logging 是個可以考慮的對象。