日志代理(logging proxy)是一个子类的对象,它可以截获方法调用,并进行日志记录,然后调用超类中的方法。例如,如果在调用 Random 类的 nextDouble 方法时出现了问题,就可以按照下面的方式,以匿名子类实例的形式创建一个代理对象:

    1. Random generator = new Random() {
    2. public double nextDouble() {
    3. double result = super.nextDouble();
    4. Logger.getGlobal().info("nextDouble: " + result);
    5. return result;
    6. }
    7. };

    当调用 nextDouble 方法时,就会产生一个日志消息。要想知道谁调用了这个方法,就要生成一个堆栈轨迹。
    利用 Throwable 类提供的 printStackTrace 方法,可以从任何一个异常对象中获得堆栈情况。
    不一定要通过捕获异常来生成堆栈轨迹。只要在代码的任何位置插入下面这条语句就可以获得堆栈轨迹:

    1. THread.dumpStack();

    错误信息被发送到 System.err 中,而不是 System.out 中。
    因此要这样捕获错误流:

    1. java MyProgram 2> errors.txt

    要想观察类的加载过程,可以用 -verbose 标志启动 Java 虚拟机。