springboot自定义注解的使用++日志

文章介绍了如何在Spring框架中使用AOP实现日志功能。首先添加aspectjweaver依赖,然后定义自定义注解`@Log`,接着创建一个切面`LogAspect`,包含环绕通知和异常通知,用于记录方法的执行时间和日志信息。最后,将自定义注解添加到控制器方法上,当方法被调用时,切面会自动记录相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.添加切面依赖

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.9</version>
</dependency>

2.自定义注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
    String value() default "";
}

3.添加切面

添加component注解自动装配bean到ioc容器中
添加切面注解   
@Component
@Aspect
@Slf4j
public class LogAspect {
​
    private final LogService logService;
​
    ThreadLocal<Long> currentTime = new ThreadLocal<>();
​
    public LogAspect(LogService logService) {
        this.logService = logService;
    }
​
    /**
     * 配置切入点,路径为添加自定义注解所在的位置
     */
    @Pointcut("@annotation(cn.edu.tsu.torox.sysLog.annotation.Log)")
    public void logPointcut() {
        // 该方法无方法体,主要为了让同类中其他方法使用此切入点
    }
​
    /**
     * 配置环绕通知,使用在方法logPointcut()上注册的切入点
     *
     * @param joinPoint join point for advice
     */
    @Around("logPointcut()")
    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
        Object result;
        currentTime.set(System.currentTimeMillis());
        result = joinPoint.proceed();
        cn.edu.tsu.torox.sysLog.model.Log log = new cn.edu.tsu.torox.sysLog.model.Log("INFO",System.currentTimeMillis() - currentTime.get());
        currentTime.remove();
//        String request = RequestHolder.getHttpServletRequest();
  //业务类,根据需求定义,这里为日志,提前建表,进行crud
        logService.save("1", "google", "192.168.231.20",joinPoint, log);
        return result;
    }
​
    /**
     * 配置异常通知
     *
     * @param joinPoint join point for advice
     * @param e exception
     */
    @AfterThrowing(pointcut = "logPointcut()", throwing = "e")
    public void logAfterThrowing(JoinPoint joinPoint, Throwable e) {
        cn.edu.tsu.torox.sysLog.model.Log log = new cn.edu.tsu.torox.sysLog.model.Log("ERROR",System.currentTimeMillis() - currentTime.get());
        currentTime.remove();;
//        HttpServletRequest request = RequestHolder.getHttpServletRequest();
        logService.save("1", "google", "192.168.231.20", (ProceedingJoinPoint)joinPoint, log);
    }
​
}

4.具体详细参数在joinPoint对象中

5.将自定义注解添加到相应的控制层方法上

流程:

接口-->控制层--->找到带有自定义注解的方法---->跳入切面--->执行环绕通知中的方法(获取该类的方法)

依赖:若项目使用的数据层技术为Spring-data-jpa则无须单独引入aspectjweaver依赖。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值