一.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
二.创建对应的实体类
blog指定数据库中存储日志的表名
三.自定义注解
四.创建切面类
@Aspect
@Component
public class ServiceLogAspect {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
private LogService logService;
//1、配置匹配ServiceMonitor注解表达式
@Pointcut("@annotation(com.anjiplus.template.gaea.business.modules.blog.annotations.ServiceMonitor)")
public void serviceLog() {}
@Around(value = "serviceLog()")
public Object doArount(ProceedingJoinPoint joinPoint) throws Throwable {
ServiceLog serviceLog = new ServiceLog();
//2、记录执行时间
long startTime = System.currentTimeMillis();
Object result = joinPoint.proceed(joinPoint.getArgs());
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
//3、记录方法名
String methodName = joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()";
serviceLog.setOperator(methodName);
serviceLog.setStartTime(startTime);
serviceLog.setEndTime(endTime);
serviceLog.setTotalTime(totalTime);
logger.info("**********Method:{}, Start:{}, End:{}, Total:{}ms**********",
methodName, dateFormat.format(startTime), dateFormat.format(endTime), totalTime);
logService.saveServiceLog(serviceLog);
return result;
}
}
五.只需要在方法上加上 @ILog 注解,并设置它的 value 即可(value 就是描述当前 method 作用)下面我举个例子
当访问menuTree这个接口时,日志会被记录,这个方法的功能是查询,所以我@Log里面的value也写的的查询,也可以写新增,修改,看情况
六.最后保存数据到数据库 service层
ServiceImpl
Mapper