一、基础知识
1、当controller抛出exception后,由全局异常处理器捕获处理;
2、主要用来打印异常到控制台和日志文件,发送邮件和短信到相关负责人,跳转到错误页面;
3、 logger对象为slf4j的事例,因为log4j为slf4j的实现,使用slf4j方便以后切换其他的日志实现方式;
4、全局异常处理器写在前端,是在给客户返回页面前一步对异常的捕获处理操作;
5、自己写的全局异常处理器需实现HandlerExceptionResolver接口,并重写resolveException方法;
二、编写步骤
1、pom.xml文件中引入以下jar包:
<properties>
<slf4j.version>1.6.4</slf4j.version>
</properties>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
查看maven目录结构:
2、在resources目录下加入log4j.properties的配置文件,且名字为log4j.properties,这样logger会自动调用,否则得手动配置
如:
log4j.properties的配置文件内容为:
#定义日志的级别:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别
#开发可以定义DEBUG级别的日志,上线定义INFO级别的日志
log4j.rootLogger=INFO,A3,STDOUT
#设置控制台打印
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n
#设置日志文件循环打印,当文件满1024KB后,就重新建立一个文件并打印日志
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.file=logs/server.log
log4j.appender.A3.MaxFileSize=1024KB
log4j.appender.A3.MaxBackupIndex=10
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
3、编写全局异常处理器:
package com.taotao.exception;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GlobalExceptionResolver implements HandlerExceptionResolver {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionResolver.class);
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e){
logger.info("我是info级别的异常");
logger.debug("我是debug级别的异常");
//控制台打印异常
e.printStackTrace();
//向日志文件中写入异常
logger.error("发生异常了..",e);
//发邮件jmall
//发短信
//展示错误页面
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message","网络故障,请稍后再试试吧!");
modelAndView.setViewName("error/exception");
return modelAndView;
}
}
4、测试
即可在控制台和日志文件中查看打印的内容;或者在自己的类里面打印logger日志也可以打印到控制台和日志文件。
======以下于你或许是个好消息======
好消息就是:欢迎访问下面的博客网站哈哈哈......
网站名称:Java学习笔记网 (点击进入)
url:https://www.javaxxbj.com/ (点击进入)
网站特点:
- java主要网站的导航目录
- 你可以记录自己的博客,并可以控制显示和隐藏,可利于管理啦!!!
- 可以添加收藏各个网站的链接!!!
- 甚至也可以文章收藏,点赞,关注,查看我的消息等功能哦!!1
看一小点点的截图:
或可一试哦!