1.定义注解
/*** 系统日志元注解*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogFilter {String value() default "" ;
}
2.编写切面的实现
@Aspect
@Component
public class LogAspect {private static final Logger LOGGER = LoggerFactory.getLogger(LogAspect.class) ;//切入点,已经被增强的连接点。@Pointcut("@annotation(com.boot.aop.config.LogFilter)")public void logPointCut (){}//通知增强代码@Around("logPointCut()")public Object around (ProceedingJoinPoint point) throws Throwable {Object result = null ;try{// 执行方法result = point.proceed();// 保存请求日志saveRequestLog(point);} catch (Exception e){// 保存异常日志saveExceptionLog(point,e.getMessage());}return result;}/*** 捕获异常:/ by zero* 请求路径:http://localhost:8011/saveExceptionLog* 请求方法:saveExceptionLog* 模块描述:保存异常日志* 请求参数:["cicada"]*/private void saveExceptionLog (ProceedingJoinPoint point,String exeMsg){LOGGER.info("捕获异常:"+exeMsg);HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();LOGGER.info("请求路径:"+request.getRequestURL());MethodSignature signature = (MethodSignature) point.getSignature();Method method = signature.getMethod();LOGGER.info("请求方法:"+method.getName());// 获取方法上LogFilter注解LogFilter logFilter = method.getAnnotation(LogFilter.class);String value = logFilter.value() ;LOGGER.info("模块描述:"+value);Object[] args = point.getArgs();LOGGER.info("请求参数:"+ JSONObject.toJSONString(args));}/*** 请求路径:http://localhost:8011/saveRequestLog* 请求方法:saveRequestLog* 模块描述:保存请求日志* 请求参数:["cicada"]*/private void saveRequestLog (ProceedingJoinPoint point){HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();LOGGER.info("请求路径:"+request.getRequestURL());MethodSignature signature = (MethodSignature) point.getSignature();Method method = signature.getMethod();LOGGER.info("请求方法:"+method.getName());// 获取方法上LogFilter注解LogFilter logFilter = method.getAnnotation(LogFilter.class);String value = logFilter.value() ;LOGGER.info("模块描述:"+value);Object[] args = point.getArgs();LOGGER.info("请求参数:"+ JSONObject.toJSONString(args));}
}
3.测试
@LogFilter("保存请求日志")@RequestMapping("/saveRequestLog")public String saveRequestLog (@RequestParam("name") String name){return "success:"+name ;}@LogFilter("保存异常日志")@RequestMapping("/saveExceptionLog")public String saveExceptionLog (@RequestParam("name") String name){int error = 100 / 0 ;System.out.println(error);return "success:"+name ;}
}