我的异常日志记录方面是两次记录相同的异常

时间:2011-11-17 18:10:12

标签: java exception-handling aspect exception-logging

我正在编写一个独立的应用程序,它必须启动并长时间无人值守。它不需要让异常停止,而是需要记录具有足够信息的异常,以便支持人员知道发生了什么,然后继续。

因此,每个异常都包含在运行时异常中,然后抛出以由应用程序的其他部分记录。我正在使用aop:config标签来创建一个方面来记录应用程序其余部分抛出的运行时异常。然后异常将调用堆栈继续到UncaughtExceptionHandler以静默结束异常。 但是,重复捕获相同的异常并记录(每个异常由单独的线程写入,并转到单独的日志文件中)。在调试器中,两个异常都具有相同的ID。

我的applicationContext是基本的:

    <aop:config>
        <aop:aspect ref="exceptionLoggingAspect">
             <aop:after-throwing method="logException"
              pointcut="execution(* *.*(..))" throwing="exception" />
        </aop:aspect>
    </aop:config>

UncaughtExceptionHandler同样基本,至少在我开始工作之前:

private void setUncaughtExceptionHandler()
{
    final Handler handler = new Handler();
    Thread.setDefaultUncaughtExceptionHandler(handler);

}

class Handler implements Thread.UncaughtExceptionHandler
{

    @Override
    public void uncaughtException(Thread t, Throwable e)
    {
        System.out.println("Throwable: " + e.getMessage());
        System.out.println(t.toString());
    }
}

我已经通过将切入点限制为单个包并从该包中抛出异常(不是异常日志记录所在的包)进行了实验,但它仍然记录了两次。 这个想法有根本错吗?建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

在考虑了这个之后,决定不需要Aspect,并且只是混淆了这个问题。我将日志记录添加到UncaughtExceptionHandler,它现在记录单个异常。我仍然不知道为什么同一个异常被记录多次。