如果你在一個父類為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,解決辦法是他聽了我的描述之后告訴我的:)