java 全局异常处理_自己编写Java全局异常处理器

本文介绍了如何在Java中实现全局异常处理器,包括处理器的基本作用、如何编写、配置及测试。通过创建实现HandlerExceptionResolver接口的类,结合SLF4J进行日志记录,并在发生异常时展示错误页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基础知识

1、当controller抛出exception后,由全局异常处理器捕获处理;

2、主要用来打印异常到控制台和日志文件,发送邮件和短信到相关负责人,跳转到错误页面;

3、 logger对象为slf4j的事例,因为log4j为slf4j的实现,使用slf4j方便以后切换其他的日志实现方式;

4、全局异常处理器写在前端,是在给客户返回页面前一步对异常的捕获处理操作;

5、自己写的全局异常处理器需实现HandlerExceptionResolver接口,并重写resolveException方法;

二、编写步骤

1、pom.xml文件中引入以下jar包:

1.6.4

org.slf4j

slf4j-log4j12

${slf4j.version}

查看maven目录结构:

879d8c70d798f1ded781ee462851807e.png

2、在resources目录下加入log4j.properties的配置文件,且名字为log4j.properties,这样logger会自动调用,否则得手动配置

如:

6be46aee3d5e0a2928dce4e21b99f905.png

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、测试

9d44ed9f157b12cb2f02e53e7a187026.png

即可在控制台和日志文件中查看打印的内容;或者在自己的类里面打印logger日志也可以打印到控制台和日志文件。

======以下于你或许是个好消息======

好消息就是:欢迎访问下面的博客网站哈哈哈......

网站名称:Java学习笔记网 (点击进入)

url:https://www.javaxxbj.com/ (点击进入)

网站特点:

java主要网站的导航目录

你可以记录自己的博客,并可以控制显示和隐藏,可利于管理啦!!!

可以添加收藏各个网站的链接!!!

甚至也可以文章收藏,点赞,关注,查看我的消息等功能哦!!1

看一小点点的截图:

8b2227abad88f4e02abe361327b9f25c.png

85ccc93741434233a1e1fff563c8a9d4.png

或可一试哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值