我是靠谱客的博主 深情大树,最近开发中收集的这篇文章主要介绍springboot统一切面日志和异常处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

clouds234@163.com

2018-8-1

springboot2.0.4可用

1 统一请求日志记录

在controller层添加统一的请求日志记录:

添加依赖包:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

统一切面日志类;

@Aspect

@Component

public class AopLogWebapi3 {

 

private static Logger logger=LoggerFactory.getLogger(AopLogWebapi3.class);

//设置切面;

@Pointcut("execution(public * com.c.swager.controller.*.*(..))")

public void log(){}

// /**

// * @Before 在方法执行之前执行

// * */

// @Before("log()")

// public void doBefore(){

// logger.info("doBefore~~~");

// //System.out.println("doBefore");

//

// }

// /**

// * @After在方法执行之后执行

// * */

// @After("log()")

// public void doAfter(){

// logger.info("doAfter~~~");

// //System.out.println("doAfter");

// }

/**统一设置请求日志记录;

* @Before 在方法执行之前执行

* */

@Before("log()")

public void doBefore(JoinPoint joinPoint){

// logger.info("doBefore");

//记录http请求

ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();

HttpServletRequest request = attributes.getRequest();

//从request中获取http请求的url/请求的方法类型/响应该http请求的类方法/IP地址/请求中的参数

//url

 

logger.info("url={}",request.getRequestURI());

 

//method

logger.info("method={}",request.getMethod());

 

//ip

logger.info("ip={}",request.getRemoteAddr());

 

//类方法

logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+

"."+joinPoint.getSignature().getName());

 

//参数

 

// logger.info("args={}",joinPoint.getArgs());

 

logger.info("ARGS={}", Arrays.toString(joinPoint.getArgs()));

//获取所有参数方法一:

// Enumeration<String> enu=request.getParameterNames();

// while(enu.hasMoreElements()){

// String paraName=(String)enu.nextElement();

// System.out.println(paraName+": "+request.getParameter(paraName));

// }

}

/**

* 因返回类型不统一;所以使用object接收;

*/

@AfterReturning(returning = "object",pointcut = "log()")

public void doAfterReturning(Object object){

logger.info("UserTest={}",(UserTest)object);

}

}

2 统一异常处理

创建全局异常处理类:通过使用@RestControllerAdvice或@ControllerAdvice定义统一的异常处理类,而不是在每个Controller中逐个定义;Restcontrolleradvice返回json格式数据;ControllerAdvice返回视图类型数据。@ExceptionHandler用来定义函数针对的异常类型,最后将Exception对象和请求URL映射到返回结果中;

案例中R是自定义的统一响应数据格式;实质上是一个map;

@RestControllerAdvice //声明统一切面异常捕获;

public class RRExceptionHandler{

 

@ExceptionHandler(RRException.class) //声明要捕获的异常类型;

public R handleRRException(RRException e){

R r = new R();

r.put("code",e.getCode()):

r.put("msg",e.getMessage()):

 

return r;

}

 

@ExceptionHandler(Exception.class)

public R handleException(Exception e){

 

logger.error(e.getMessage(),e);

return R.errot();

 

}

 

}

 

定义以上统一异常处理类后,就会在controller层出现对应异常时返回对应方法的返回值;

 

RRException是自定义异常类;内容如下:

public class RRException exends RuntimeException{

provate static final long serialVersionUID=1L;

 

private String msg;

private int code = 500;

 

public RREception(String msg){

super(msg):

this.msg=msg;

}

 

..........................................重载方法;

}

最后

以上就是深情大树为你收集整理的springboot统一切面日志和异常处理的全部内容,希望文章能够帮你解决springboot统一切面日志和异常处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部