今天在《java編程思想》一書中看到了異常與記錄日志,發現學會將異常記錄進日志中還是很有必要的,以下是書中的例子:
1 import java.io.PrintWriter; 2 import java.io.StringWriter; 3 import java.util.logging.Logger; 4 5 6 public class LoggingExceptions2 { 7 8 private static Logger logger = Logger.getLogger("LoggingExceptions2"); 9 static void logException(Exception e){ 10 StringWriter trace = new StringWriter(); 11 e.printStackTrace(new PrintWriter(trace)); 12 logger.severe(trace.toString()); 13 } 14 15 public static void main(String[] args) { 16 try { 17 throw new NullPointerException(); 18 } catch (NullPointerException e) { 19 logException(e); 20 } 21 } 22 }
以下是輸出結果:

靜態的Logger。getLogger()方法創建了一個String參數相關聯的Logger對象,這個Logger對象會將其輸出發送到System.err。向Logger寫入的最簡單方式就是直接調用與日志記錄消息的級別相關聯的方法,這里使用的severe()。為了產生日志記錄消息,我們要獲取異常拋出的消息,但是printStackTrace()不回默認的產生字符串。為了獲取字符串,我們需要使用重載的printStackTrace()方法,它將接受一個java.io.PrintWriter對象作為參數,如果我們將一個java.io.StringWriter對象傳給這個PrintWriter構造器,那么通過toString()方法,就可以將輸出抽取成一個字符串。
