日志代理(logging proxy)是一个子类的对象,它可以截获方法调用,并进行日志记录,然后调用超类中的方法。例如,如果在调用 Random 类的 nextDouble 方法时出现了问题,就可以按照下面的方式,以匿名子类实例的形式创建一个代理对象:
Random generator = new Random() {
public double nextDouble() {
double result = super.nextDouble();
Logger.getGlobal().info("nextDouble: " + result);
return result;
}
};
当调用 nextDouble 方法时,就会产生一个日志消息。要想知道谁调用了这个方法,就要生成一个堆栈轨迹。
利用 Throwable 类提供的 printStackTrace 方法,可以从任何一个异常对象中获得堆栈情况。
不一定要通过捕获异常来生成堆栈轨迹。只要在代码的任何位置插入下面这条语句就可以获得堆栈轨迹:
THread.dumpStack();
错误信息被发送到 System.err 中,而不是 System.out 中。
因此要这样捕获错误流:
java MyProgram 2> errors.txt
要想观察类的加载过程,可以用 -verbose 标志启动 Java 虚拟机。