首页>代码>spring boot+aop实现注解拦截异常日志和接口响应所用时间日志>/logaop/src/main/java/com/singhand/framework/common/aspectj/LogAspect.java
package com.singhand.framework.common.aspectj; import java.lang.reflect.Method; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import com.singhand.framework.common.aspectj.log.annotation.Log; /** ************************************************* * @ClassName: LogAspect * @Description: TODO(日志切面) * @author maojianyun * @date 2018年5月12日 下午3:44:09 ************************************************ */ @Aspect @Component public class LogAspect { /** ********************************************************* * @method: logPointCut * @Description: TODO(配置日志log织入点) * @return void * @author maojianyun ********************************************************* */ @Pointcut("@annotation(com.singhand.framework.common.aspectj.log.annotation.Log)") public void logPointCut() { } /** ********************************************************* * @method: doBefore * @Description: TODO(前置通知 用于拦截操作) * @Param joinPoint 切点 * @return void * @author maojianyun ********************************************************* */ @AfterReturning(pointcut = "logPointCut()") public void doBefore(JoinPoint joinPoint) { } /** * ******************************************************** * * @method: arround * @Description: TODO(环绕通知:用于记录接口所用的时间) * @Param @param pjp * @Param @return TODO(描述参数作用) * @return Object * @throws Throwable * @author TODO ********************************************************* */ @Around("logPointCut()") public Object arround(ProceedingJoinPoint joinPoint) throws Throwable { long startTime = System.currentTimeMillis(); Object o = joinPoint.proceed(); // 获得注解 Log log = getAnnotationLog(joinPoint); String action = log.action(); // 添加记录时间的日志 System.err.println("接口描述:"+action); System.err.println("所用时间"+(System.currentTimeMillis() - startTime)); return o; } /** ********************************************************* * @method: AfterThrowing * @Description: TODO(后置异常通知) * @Param joinPoint * @return void * @author maojianyun ********************************************************* */ @AfterThrowing(value = "logPointCut()", throwing = "e") public void AfterThrowing(JoinPoint joinPoint, Exception e) { try { // 获得注解 Log log = getAnnotationLog(joinPoint); String action = log.action(); // 添加记录异常日志 System.err.println("异常功能描述:"+action); System.err.println("拦截异常日志。。。。。。。。。。。。。。。"); e.printStackTrace(); } catch (Exception e1) { e1.printStackTrace(); } } /** ********************************************************* * @method: getAnnotationLog * @Description: TODO(判断是否具有注解) * @Param joinPoint 切点 * @Param Exception * @return Log 日志 * @author Exception ********************************************************* */ public Log getAnnotationLog(JoinPoint joinPoint) throws Exception { Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; Method method = methodSignature.getMethod(); if (method != null) { return method.getAnnotation(Log.class); } return null; } }
最近下载更多
fellowfun LV12
2023年3月16日
长安不测字 LV2
2021年6月16日
LKBBDD LV7
2020年10月13日
zaizai21312 LV10
2020年6月12日
gy964781920 LV5
2020年6月8日
一蓑烟雨 LV11
2020年5月4日
wsx456521 LV10
2020年4月27日
jw1992 LV6
2020年2月20日
liuwenlong LV20
2019年12月28日
崔牛逼 LV8
2019年6月18日
最近浏览更多
漫步的海星 LV4
2023年9月21日
kk992127170 LV6
2022年10月25日
fellowfun LV12
2022年10月19日
小翊杭宝 LV2
2022年6月9日
543666826 LV33
2022年3月11日
等你归来 LV2
2022年3月1日
huaua7676 LV30
2021年12月10日
zzzzzzzzhasdas LV13
2021年11月9日
长安不测字 LV2
2021年6月16日
ma406805131 LV15
2021年3月11日