Springboot AOP实现的自定义日志注解

刚工作的时候,受到项目底层代码里有很多类似的代码,刚好学习到AOP这方面的知识,就做了一个自定义的日志注解包。

logger.info("ENTER METHOD:{}",methodName);
logger.info("LEAVE METHOD:{}, COST TIME:{} ms",methodName,time);

定义需要被扫描到的注解类:

@Target说明注解生效的是方法类型

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface KLoger {

}

定义切面:

@Pointcut 说明将切点设置为上面被注解类注解的方法

@Around("kLogerAspect()")通过切点获取AOP代理链获取被注解的方法名、类名,再使用类名构建日志的对象

最后再构建自己想要的日志内容

但是别忘记joinPoint.proceed()执行被注解的方法,不然方法时不会执行滴

@Configuration
@Aspect
@Slf4j
public class KLogerAspect {

    /**
     * @author Lingyu Kong
     */
    @Pointcut("@annotation(KLoger)")
    public void kLogerAspect(){}

    /**
     * @author Lingyu Kong
     * @param joinPoint  被注解的方法
     * @return  java.lang.Object
     */
    @Around("kLogerAspect()")
    public Object aroundLogPointCut(ProceedingJoinPoint joinPoint) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object result = recordLog(joinPoint,startTime);
        return result;
    }

    /**
     * @author Lingyu Kong
     * @param joinPoint 被注解的方法
     * @param startTime 被注解方法开始运行的时间
     * @return java.lang.Object
     */
    private Object recordLog(ProceedingJoinPoint joinPoint, Long startTime) throws Throwable {
        String classname = joinPoint.getTarget().getClass().getSimpleName();
        final Logger logger = LoggerFactory.getLogger(classname);
        String methodName = joinPoint.getSignature().getName();
        Object result =null;
        logger.info("====================================================");
        logger.info("ENTER METHOD:{}",methodName);
        result = joinPoint.proceed();
        long time =  System.currentTimeMillis() - startTime;
        logger.info("LEAVE METHOD:{}, COST TIME:{} ms",methodName,time);
        logger.info("====================================================");
        return result;
    }

}

源码已经打包上传到maven仓库了,大家感兴趣可以下一个玩一玩

虽然东西很low,但是也记录了自己学习的进程,请大家多指教。

<dependency>
            <groupId>io.github.TheRealjavisKong</groupId>
            <artifactId>k-annotation</artifactId>
            <version>1.0.4</version>
</dependency>

如果想直接使用:

在pom文件里引入依赖之后,需要在Springboot启动类里添加如下的代码,不然会扫描不到这个包

@SpringBootApplication(scanBasePackages = {"com.github.kly.annotation"})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值