异常:异常与记录日志



/*
 *  2018年3月28日09:26:29
 *   代码目的:
 *       演示异常与记录日志的使用。
 *       java.util.logging工具将输出记录到日志中。
 *       日志消息被转发到已注册的 Handler 对象,
 *       该对象可以将消息转发到各种目的地,包括控制台、文件、OS 日志等等。
 *       静态的Logger.getLogger方法创建了一个String参数相关联的Logger对象,通常与错误相关
 *       的包名和类名,这个Logger对象会将其输出发送到System.err。向Logger写入
 *       的最简单的方式就是直接调用与日志记录消息级别相关联的方法。
 *      
 *       为了产生日志记录字符串,我们要获取异常抛出处的栈轨迹,但是printStackTrace不会默认的产生
 *       字符串。为了获取字符串,我们需要使用重载的printStackTrace()方法,它接受一个java.io.PrintWriter
 *       对象作为参数,通过调用toString方法,就可以把输出抽取为一个String。
 *      
 * */

//: exceptions/LoggingExceptions.java
// An exception that reports through a Logger.
import java.util.logging.*;
import java.io.*;

class LoggingException extends Exception {
  private static Logger logger =
    Logger.getLogger("LoggingException");
  public LoggingException() {
    StringWriter trace = new StringWriter();
    //printStackTrace(PrintWriter)将此Throwable及其追踪输出到指定的PrintWriter
    printStackTrace(new PrintWriter(trace));
    logger.severe(trace.toString());
    //logger.info(trace.toString());
  }
}

public class LoggingExceptions {
  public static void main(String[] args) {
    try {
      throw new LoggingException();
    } catch(LoggingException e) {
      System.err.println("Caught " + e);
    }
    try {
      throw new LoggingException();
    } catch(LoggingException e) {
      System.err.println("Caught " + e);
    }
  }
} /* Output: (85% match)
Aug 30, 2005 4:02:31 PM LoggingException 
SEVERE: LoggingException
        at LoggingExceptions.main(LoggingExceptions.java:19)

Caught LoggingException
Aug 30, 2005 4:02:31 PM LoggingException 
SEVERE: LoggingException
        at LoggingExceptions.main(LoggingExceptions.java:24)

Caught LoggingException
*///:~

你可能感兴趣的:(Java,编程思想)