我正在编写一个独立的应用程序,它必须启动并长时间无人值守运行。除了有例外情况使其停止之外,它还需要记录具有足够信息的例外情况,以便支持人员了解发生的情况并继续进行。我的异常记录方面记录了两次相同的异常
因此,每个异常都包装在运行时异常中,然后抛出由应用程序的不同部分记录。我使用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());
}
}
我已经通过限制切入点,以单一封装试验,并从该包中抛出一个异常(不是包含异常日志记录的包),但它仍然记录两次。 这个想法有什么根本错误吗?建议感激。