通常我们在struts.xml的配置中总是会配置全局的异常,然后跳转到某个页面,但是很多情况的时候的异常信息并没有记录到log4j的日志信息中
,这是为什么呢,是因为全局异常对应的拦截器默认日志功能是没有开启的,所以要进行配置才能开启。如下:
<package name="struts-rootException" extends="struts-default">
<interceptors>
<interceptor-stack name="myGlobalExceptionStack">
<interceptor-ref name="defaultStack">
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">ERROR</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myGlobalExceptionStack"></default-interceptor-ref>
<global-results>
<result name="root-exception">/WEB-INF/pages/404.jsp
</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="root-exception"
exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
</package>
这里就是设置默认拦截器栈中的开启日志属性,并且设置日志级别是error。
<interceptor-stack name="myGlobalExceptionStack">
<interceptor-ref name="defaultStack">
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">ERROR</param>
</interceptor-ref>
</interceptor-stack>
设置后再将原来的默认拦截器栈起一个名字“myGlobalExceptionStack”,然后再将“myGlobalExceptionStack”设置为默认的拦截器栈:
<default-interceptor-ref name="myGlobalExceptionStack"></default-interceptor-ref>
此时所有继承这个包“struts-rootException”的其他struts-xxxx.xml文件中的默认拦截器栈就是新的了。