如果你在一個父類為BaseAction的子類中拋出異常
那么控制臺會把這個異常打印兩次,實際上顯示一次就夠了。
查看源碼。得知。
如果你在BaseAction的ActionForward xxx()中有異常拋出
那么會執(zhí)行到ActionExceptionHandler這個類的execute()方法。
這個方法有兩行代碼值得注意
super.execute()
log.Exception()
log.Exception()方法就是打印[ERROR]日志的。
那么為什么會出現(xiàn)兩次呢。
答案就在super.execute() 這個類是繼承了Struts的ExceptionHandler類。
而在ExceptionHandler類中的execute()方法中,已經(jīng)調(diào)用了 log.Exception()
所以導(dǎo)致會出現(xiàn)打印兩次error的情況。
解決辦法是把ActionExceptionHandler.execute()方法中的調(diào)用log.Exception()的這句注釋掉。那么就正常了。
PS:發(fā)了一封郵件給Matt(Appfuse's author)很快得到回信,然后就把這個bug提交給了Appfuse的JIRA。
http://issues.appfuse.org
謝謝 liusong1111,解決辦法是他聽了我的描述之后告訴我的:)