在使用SimpleMappingExceptionResolver實現統一異常處理後(參考Spring MVC的異常統一處理方法), 發現出現異常時,log4j無法在控制台輸出錯誤日誌。因此需要自定義一個繼承至SimpleMappingExceptionResolver的 RrtongMappin....
在使用SimpleMappingExceptionResolver實現統一異常處理後(參考Spring MVC的異常統一處理方法), 發現出現異常時,log4j無法在控制台輸出錯誤日誌。因此需要自定義一個繼承至SimpleMappingExceptionResolver的 RrtongMappingExceptionResolver類,在RrtongMappingExceptionResolver中通過 log.error(ex.getMessage())的方式輸出日誌到控制臺上。以下是具體的配置和 RrtongMappingExceptionResolver的實現。
配置自定義的統一異常處理類RrtongMappingExceptionResolver
<bean name="exceptionResolver" class="com.rrtong.frame.exception.RrtongMappingExceptionResolver"> <!-- 定義異常處理頁面用來獲取異常信息的變數名,預設名為exception --> <property name="exceptionAttribute" value="ex"></property> <!--定義需要特殊處理的異常,用類名或完全路徑名作為key,異常也頁名作為值--> <property name="exceptionMappings"> <props> <prop key="com.rrtong.frame.exception.GuideTestException">../../exception/error-interface</prop> <!--<prop key="com.rrtong.frame.exception.NotLoginException">login</prop>--> <prop key="java.lang.Exception">../../exception/errorPage</prop> </props> </property> <property name="statusCodes"> <props> <prop key="errors/error">500</prop> <prop key="errors/404">404</prop> </props> </property> <!-- 設置日誌輸出級別,不定義則預設不輸出警告等錯誤日誌信息 --> <property name="warnLogCategory" value="DEBUG" /> <!-- 預設HTTP狀態碼 --> <property name="defaultStatusCode" value="500" /> </bean>
實現統一異常處理類RrtongMappingExceptionResolver
/** * @className: RrtongMappingExceptionResolver * @description: 繼承至SimpleMappingExceptionResolver的自定義的統一異常處理 * @author: Administrator * @date 2016年1月12日 */ public class RrtongMappingExceptionResolver extends SimpleMappingExceptionResolver{ private final static Logger log = LoggerFactory.getLogger(RrtongMappingExceptionResolver.class); @Override protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { Map<String, Exception> model = new HashMap<String, Exception>(); model.put("ex", ex); ModelAndView modelAndView = new ModelAndView("../../exception/errorPage",model); /*錯誤日誌輸出到控制台*/ log.error(ex.getMessage()); return modelAndView; } }