Update SysLogAspect.java

cyj
pbvfus8to 8 months ago
parent 8fb5e770ae
commit 6e4e19e236

@ -27,54 +27,81 @@ import org.springframework.stereotype.Component;
import java.util.Date;
/**
* SysLogAspect
* AOP
* 便
*
* @author lgh
*/
@Aspect
@Component
public class SysLogAspect {
@Autowired
private SysLogService sysLogService;
private static Logger logger = LoggerFactory.getLogger(SysLogAspect.class);
@Around("@annotation(sysLog)")
public Object around(ProceedingJoinPoint joinPoint,com.yami.shop.common.annotation.SysLog sysLog) throws Throwable {
long beginTime = SystemClock.now();
//执行方法
Object result = joinPoint.proceed();
//执行时长(毫秒)
long time = SystemClock.now() - beginTime;
// 自动注入SysLogService用于将收集到的日志信息保存到数据库等存储介质中
@Autowired
private SysLogService sysLogService;
// 使用SLF4J的Logger来记录日志信息方便在出现问题或者调试时输出相关的提示信息
private static Logger logger = LoggerFactory.getLogger(SysLogAspect.class);
/**
* Around
* @SysLog
* IPSysLog
*
* @param joinPoint
* @param sysLog @SysLog
* @return
* @throws Throwable
*/
@Around("@annotation(sysLog)")
public Object around(ProceedingJoinPoint joinPoint, com.yami.shop.common.annotation.SysLog sysLog) throws Throwable {
// 获取方法执行前的时间戳使用SystemClock.now()获取更精准的时间可能比System.currentTimeMillis()性能更好)
long beginTime = SystemClock.now();
// 执行被拦截的目标方法,获取其返回结果。如果目标方法有异常抛出,会在这里直接抛出,后续代码不会执行
Object result = joinPoint.proceed();
// 计算方法执行所花费的时间(单位:毫秒),通过当前时间减去方法开始执行的时间得到
long time = SystemClock.now() - beginTime;
// 创建一个SysLog实体对象用于封装要保存的系统日志信息
SysLog sysLogEntity = new SysLog();
SysLog sysLogEntity = new SysLog();
if(sysLog != null){
//注解上的描述
sysLogEntity.setOperation(sysLog.value());
}
// 如果被拦截的方法上标注的@SysLog注解不为空则将注解中的描述信息设置为系统日志的操作描述
if (sysLog!= null) {
// 注解上的描述,通常是对该操作的简要说明,例如“用户登录操作”等
sysLogEntity.setOperation(sysLog.value());
}
//请求的方法名
String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
sysLogEntity.setMethod(className + "." + methodName + "()");
// 获取请求的方法名,通过连接点对象获取目标类的全限定名以及方法名,拼接成完整的方法调用表示形式
String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
sysLogEntity.setMethod(className + "." + methodName + "()");
//请求的参数
Object[] args = joinPoint.getArgs();
String params = Json.toJsonString(args[0]);
sysLogEntity.setParams(params);
// 获取请求的参数通过连接点对象获取方法的参数数组这里将参数转换为JSON字符串进行存储方便查看参数详情
// 目前只取了参数数组中的第一个元素进行转换,如果参数有多个可能需要更完善的处理逻辑
Object[] args = joinPoint.getArgs();
String params = Json.toJsonString(args[0]);
sysLogEntity.setParams(params);
//设置IP地址
sysLogEntity.setIp(IpHelper.getIpAddr());
// 设置IP地址通过IpHelper工具类获取客户端的IP地址信息并设置到系统日志实体中
sysLogEntity.setIp(IpHelper.getIpAddr());
//用户名
String username = SecurityUtils.getSysUser().getUsername();
sysLogEntity.setUsername(username);
// 获取用户名通过SecurityUtils工具类获取当前登录系统的用户信息再获取用户名设置到系统日志实体中
String username = SecurityUtils.getSysUser().getUsername();
sysLogEntity.setUsername(username);
sysLogEntity.setTime(time);
sysLogEntity.setCreateDate(new Date());
//保存系统日志
sysLogService.save(sysLogEntity);
// 设置方法执行时长(单位:毫秒)到系统日志实体中
sysLogEntity.setTime(time);
// 设置系统日志的创建日期,使用当前时间作为创建时间
sysLogEntity.setCreateDate(new Date());
return result;
}
// 调用SysLogService的save方法将封装好的系统日志实体保存到数据库或者其他存储介质中实现系统日志记录功能
sysLogService.save(sysLogEntity);
}
// 返回目标方法执行的结果,保证原方法调用链的正常返回逻辑
return result;
}
}
Loading…
Cancel
Save