今天在《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()方法,就可以将输出抽取成一个字符串。