Handler負責日誌訊息的輸出目的地,在Java SE中預設有五個Handler:
以 System.err 輸出記錄。
將訊息輸出至檔案
以 OutputStream 輸出記錄。
將訊息透過Socket傳送至遠端主機。
將訊息暫存在記憶體中。
如果這五個Handler還不符合您的需求,則可以自訂Handler,方法是繼承java.util.logging.Handler類別,這個類別有三個抽象方法必須重新定義: public void publish(LogRecord logRecord);
public void flush(); public void close(); publish()方法可取得LogRecord實例,您可以使用它來取得一些與程式執行有關的日誌資訊,flush()方法用來將緩衝區中的日誌訊息出 清(如果有的話),close()方法用來關閉輸出訊息的物件(例如檔案開啟的話,可以在這邊關閉檔案),以釋放所有的相關資源。 Handler通常搭配Formatter,Handler負責輸出,而Formatter負責格式,Formatter的自訂可以參考自訂 Formatter,java.util.logging.Handler 預設並沒有設置Formatter,在實作Handler時,Handler的setFormatter()是用來設置Formatter的,您可以在 publish()中透過getFormatter()來取得Formatter實例,進行格式化輸出,例如:
import java.util.logging.*;
public class CustomLogHandler extends Handler { ... public void publish(LogRecord logRecord) { String logMsg = getFormatter().format(logRecord); out.print(logMsg); // out 是您自訂的輸出目的地物件 } public void flush() { .... } public void close() { ... } } |