注解
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface SystemLog {
String BusinessName();
}
自定义切面
@Component
@Aspect
@Slf4j
public class MyAspect {
@Pointcut("@annotation(com.sanxing.annotation.SystemLog)")
public void getPt() {
}
@Around("getPt()")
public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
Object proceed;
try {
beforeHandle(proceedingJoinPoint);
proceed = proceedingJoinPoint.proceed();
afterHandle(proceed);
} finally {
log.info("=======End=======" + System.lineSeparator());
}
return proceed;
}
private void beforeHandle(ProceedingJoinPoint proceedingJoinPoint) {
ServletRequestAttributes requestAttributes =
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
SystemLog systemLog = getSystemLog(proceedingJoinPoint);
log.info("=======Start=======");
log.info("URL : {}", request.getRequestURL());
log.info("BusinessName : {}", systemLog.BusinessName());
log.info("HTTP Method : {}", request.getMethod());
log.info("Class Method : {}.{}", proceedingJoinPoint.getSignature().getDeclaringTypeName(), ((MethodSignature) proceedingJoinPoint.getSignature()).getName());
log.info("IP : {}", request.getRemoteHost());
log.info("Request Args : {}", JSON.toJSONString(proceedingJoinPoint.getArgs()));
}
private void afterHandle(Object proceed) {
log.info("Response : {}", JSON.toJSONString(proceed));
}
private SystemLog getSystemLog(ProceedingJoinPoint proceedingJoinPoint) {
MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();
SystemLog annotation = signature.getMethod().getAnnotation(SystemLog.class);
return annotation;
}
}
方法测试
@SystemLog(BusinessName = "更新用户信息")
@Override
public ResponseResult updateUserInfo(User user) {
LambdaUpdateWrapper<User> userLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
userLambdaUpdateWrapper.eq(User::getId, user.getId());
userLambdaUpdateWrapper.set(User::getAvatar, user.getAvatar());
userLambdaUpdateWrapper.set(User::getNickName,user.getNickName());
userLambdaUpdateWrapper.set(User::getSex, user.getSex());
update(userLambdaUpdateWrapper);
return ResponseResult.okResult();
}