概述
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统一切面日志和异常处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复