如果你在一个父类为BaseAction的子类中抛出异常

那么控制台会把这个异常打印两次,实际上显示一次就够了。


查看源码。得知。


如果你在BaseAction的ActionForward xxx()中有异常抛出

那么会执行到ActionExceptionHandler这个类的execute()方法。

这个方法有两行代码值得注意

super.execute()

log.Exception()


log.Exception()方法就是打印[ERROR]日志的。

那么为什么会出现两次呢。

答案就在super.execute()  这个类是继承了Struts的ExceptionHandler类。

而在ExceptionHandler类中的execute()方法中,已经调用了 log.Exception()


所以导致会出现打印两次error的情况。

解决办法是把ActionExceptionHandler.execute()方法中的调用log.Exception()的这句注释掉。那么就正常了。



PS:发了一封邮件给Matt(Appfuse's author)很快得到回信,然后就把这个bug提交给了Appfuse的JIRA。

http://issues.appfuse.org/browse/APF-296

谢谢 liusong1111,解决办法是他听了我的描述之后告诉我的:)