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