如果你在一个父类为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,解决办法是他听了我的描述之后告诉我的:)