@Slf4j
@Aspect
@Component
public class AspectLogTools {
// @Aspect 表明是一个切面类
// @Component 将当前类注入到Spring容器内
// @Pointcut 切入点,其中execution用于使用切面的连接点。使用方法:execution(方法修饰符(可选) 返回类型 方法名 参数 异常模式(可选)) ,可以使用通配符匹配字符,*可以匹配任意字符。
// @Before 在方法前执行
// @After 在方法后执行
// @AfterReturning 在方法执行后返回一个结果后执行
// @AfterThrowing 在方法执行过程中抛出异常的时候执行
// @Around 环绕通知,就是可以在执行前后都使用,这个方法参数必须为ProceedingJoinPoint,proceed()方法就是被切面的方法,上面四个方法可以使用JoinPoint,JoinPoint包含了类名,被切面的方法名,参数等信息。
/**
* 每行日志抬头字符串
*/
private String infoStr = "\n ";
private String errorStr = "\n\t";
@Autowired
private HttpServletRequest request;
/**
* 配置切面(XXX包下XXX类)以及切入点(XXX类下XXX方法)
* 匹配多个包 execution(public * com.wgz.springtestdome.controller1.*.*(..))||execution(public * com.wgz.springtestdome.controller2.*.*(..))
*/
@Pointcut("execution(public * com.wgz.springtestdome.controller.*.*(..))")
public void logAspect() {
}
@Around("logAspect()")
public Object doAround(ProceedingJoinPoint AfterThrowing) throws Throwable {
StringBuffer aspectReturnStr = new StringBuffer();
Object[] args = AfterThrowing.getArgs();
//此处可对参数args自行操作
Object result = AfterThrowing.proceed(args);
//此处可对结果result自行操作
aspectReturnStr.append(infoStr + "ip:" + RequestTools.getIpAddr(request) + " 的用户访问了系统!!!!");
aspectReturnStr.append(infoStr + "访问的系统方法:" + AfterThrowing.getSignature());
aspectReturnStr.append(infoStr + "访问的方法参数:" + Arrays.toString(args));
aspectReturnStr.append(infoStr + "获取的返回值:" + JSONObject.toJSONString(result));
aspectReturnStr.append("\n");
log.info(aspectReturnStr.toString());
return result;
}
@AfterThrowing(pointcut = "logAspect()", throwing = "e")
public void doAfterTrowing(JoinPoint joinPoint, RuntimeException e) {
StringBuffer aspectReturnStr = new StringBuffer();
aspectReturnStr.append(errorStr + "ip:" + RequestTools.getIpAddr(request) + " 的用户访问了系统!!!!");
aspectReturnStr.append(errorStr + "访问的系统方法:" + joinPoint.getSignature());
aspectReturnStr.append(errorStr + "访问的方法参数:" + Arrays.toString(joinPoint.getArgs()));
aspectReturnStr.append(errorStr + "访问时发生了异常,具体异常信息如下!!!!!!");
log.error(aspectReturnStr.toString());
}
}
Spring AOP日志记录
于 2022-01-10 16:25:59 首次发布