除了XMLFormatter與SimpleFormatter之外,您也可以自訂自己的記錄輸出格式,只要繼承抽象類別Formatter,並重新定義其format()方法即可,format()方法會傳入一個LogRecord物件作為參數,您可以使用它來取得一些與程式執行有關的資訊。
下面這個程式是個簡單的示範,自訂一個簡單的TableFormatter:
package onlyfun.caterpillar;
import java.util.logging.*;
public class TableFormatter extends Formatter { public String format(LogRecord logRecord) { return "LogRecord info: " + logRecord.getSourceClassName() + "\n" + "Level\t|\tLoggerName\t|\tMessage\t|\n" + logRecord.getLevel() + "\t|\t" + logRecord.getLoggerName() + "\t|\t" + logRecord.getMessage() + "\t|\n\n"; } }
再來就是使用Handler的setFormatter()方法設定Formatter物件,例如:
package onlyfun.caterpillar; import java.util.logging.*; public class FormatterDemo { public static void main(String[] args) { Logger logger = Logger.getLogger("formatterDemo"); try { for(Handler h : logger.getParent().getHandlers()) { if(h instanceof ConsoleHandler) { h.setFormatter(new TableFormatter()); } } logger.info("測試訊息1"); logger.warning("測試訊息2"); } catch (SecurityException e) { e.printStackTrace(); } } }
您取得預設的root
Logger,並取得其ConsoleHandler,之後設定它的Formatter為自訂的TableFormatter,其執行結果如下:
LogRecord info: onlyfun.caterpillar.FormatterDemo
Level |
LoggerName |
Message |
INFO | formatterDemo | 測試訊息1 |
LogRecord info: onlyfun.caterpillar.FormatterDemo
Level
| LoggerName
| Message |
WARNING| formatterDemo | 測試訊息2 |
|
|