使用springaop实现行为日志,并存储到数据库

一.引入依赖


    org.springframework.boot
    spring-boot-starter-aop

二.创建对应的实体类

使用springaop实现行为日志,并存储到数据库_第1张图片

blog指定数据库中存储日志的表名

三.自定义注解

使用springaop实现行为日志,并存储到数据库_第2张图片

四.创建切面类

@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 作用)下面我举个例子

使用springaop实现行为日志,并存储到数据库_第3张图片

当访问menuTree这个接口时,日志会被记录,这个方法的功能是查询,所以我@Log里面的value也写的的查询,也可以写新增,修改,看情况

六.最后保存数据到数据库 service层

使用springaop实现行为日志,并存储到数据库_第4张图片

 ServiceImpl使用springaop实现行为日志,并存储到数据库_第5张图片

 Mapper

使用springaop实现行为日志,并存储到数据库_第6张图片

 

 

你可能感兴趣的:(java实现日志,eureka,java,spring,boot)