自定义日志注解 简单DEMO

自定义Log 注解

/**
 * <简述>自定义日志注解
 * <详细描述>
 * @author syf
 * @date 2023/7/5 10:22
 * @return null
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
    String value();
}

编写注解的切面类

/**
 * <简述>
 * <详细描述>
 *
 * @author syf
 * @date 2023年07月05日 10:24
 */
@Slf4j
@Component //放入容器中
@Aspect //切面类直接
public class LogAspect {

    //切点:切自己定义的Log的注解
    @Pointcut("@annotation(com.ratelimiter.demo.annotation.Log)")
    public void pointCut(){}


    /**
     * <简述>在方法之前执行
     * <详细描述>可以获取一些请求的入参,以及请求 地址信息等
     * @author syf
     * @date 2023/7/19 15:23
     * @param joinPoint
     */
    @Before("pointCut()")
    public void before(JoinPoint joinPoint){

        HttpServletRequest request = RequestHolder.getRequest();

        //请求方法
        String method = request.getMethod();
        //请求路径
        String requestURI = request.getRequestURL().toString();

        //请求参数
        Object[] args = joinPoint.getArgs();
        String s = Arrays.toString(args);


        MethodSignature signature = (MethodSignature)joinPoint.getSignature();
        //获取注解入参
        Log annotation = signature.getMethod().getAnnotation(Log.class);
        String value = annotation.value();

        log.info("请求方法: {}", method);
        log.info("请求路径: {}", requestURI);
        log.info("请求参数: {}", s);
        log.info("注解入参: {}", value);
    }

    /**
     * <简述>记录方法 返回
     * <详细描述>
     * @author syf
     * @date 2023/7/19 15:26
     * @param o
     */
    @AfterReturning(returning = "o", pointcut = "pointCut()")
    public void afterReturning(Object o){
        log.info("restult---->", o);
    }

}

测试:编写请求并且在切面类上标注

@RestController
public class TestController {

    @GetMapping("/test")
    /**
     * 限流,10 秒之内,这个接口可以访问 3 次
     */
    @Log("6666")
    @RateLimiter(time = 10, count = 3,limitType = LimitType.IP)
    public String test(@RequestParam("name") String name) {
        return "ok" ;
    }
}

结果展示:

2023-07-05 10:58:51.080  INFO 5044 --- [nio-8080-exec-1] com.ratelimiter.demo.RateLimiterAspect   : 一个时间窗内请求次数:3,当前请求次数:1,缓存的 key 为 rate_limit:127.0.0.1-com.ratelimiter.demo.TestController-test
2023-07-05 10:58:51.081  INFO 5044 --- [nio-8080-exec-1] com.ratelimiter.demo.aspect.LogAspect    : 请求方法: GET
2023-07-05 10:58:51.081  INFO 5044 --- [nio-8080-exec-1] com.ratelimiter.demo.aspect.LogAspect    : 请求路径: http://localhost:8080/test
2023-07-05 10:58:51.081  INFO 5044 --- [nio-8080-exec-1] com.ratelimiter.demo.aspect.LogAspect    : 请求参数: [syf]
2023-07-05 10:58:51.081  INFO 5044 --- [nio-8080-exec-1] com.ratelimiter.demo.aspect.LogAspect    : 注解入参: 6666

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值