首页>代码>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日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友