/*
* 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 <init>
SEVERE: LoggingException
at LoggingExceptions.main(LoggingExceptions.java:19)
Caught LoggingException
Aug 30, 2005 4:02:31 PM LoggingException <init>
SEVERE: LoggingException
at LoggingExceptions.main(LoggingExceptions.java:24)
Caught LoggingException
*///:~