在使用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; } }