项目里搭建了ELK日志分析,能够将后台的不同级别日志分类检索查看,其中error日志主要包括各种抛出的异常,用于定位系统的问题。
error日志的打印使用了logback的error()方法,但是如果要把每个异常都打印出来的话,需要在controller层的catch块中写:
logger.error("出错原因",ex);
由于需要每个异常人工写错误日志打印,经常出现遗漏,所以想找一个集中的点,把遗漏的异常打印出来,用于排错。
目前采用SimpleMappingExceptionResolver来处理。
1、代码处理
public class CustomExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object object, Exception exception) {
ModelAndView modelAndView = new ModelAndView("/frame/error", model);
/* 错误日志输出到控制台 */
logger.error("捕捉到Spring全局异常",ex);
return modelAndView;
}
}
2、声明到 Spring 配置文件
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="/frame/error"></property>
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">/frame/error</prop>
</props>
</property>
</bean>
这样如果controller层没有捕捉的异常,也可以打印出错误日志。
网友评论