【SpringBoot】AOP自定义注解实现日志的输出

1、创建一个自定义注解
@Retention(RetentionPolicy.RUNTIME)//运行时生效
@Target({ElementType.METHOD})//定义注解只能放在方法上
@Documented
public @interface SysLog {
    //value默认值
    String value() default "System Logger"; 
}
2、定义切面
@Slf4j
@Aspect
@Component
public class SysLogAspect {

    @Around("@annotation(sysLog)")
    public Object SysLog(ProceedingJoinPoint point, SysLog sysLog) throws Throwable {

        log.debug(sysLog.value());

        MethodSignature methodSignature = (MethodSignature) point.getSignature();

        //获取参数名
        String[] parameterNames = methodSignature.getParameterNames();

        //获取参数值
        Object[] args = point.getArgs();

        log.debug("参数名:"+Arrays.toString(parameterNames));
        log.debug("参数值:"+Arrays.toString(args));

        long start = System.currentTimeMillis();

        //执行后的结果,一定要记得返回,否则后面的方法流程就无法获取对应的值
        Object o = point.proceed();

        long end = System.currentTimeMillis();

        //计算程序执行所消耗的时长
        log.debug("耗时"+ (end - start) + "ms");

        return o;
    }
}
3、测试

日志一般都再业务层实现,这里选用一个SpringBoot项目的业务层加上我们的自定义注解,来实现日志的功能。

mapper接口

@Repository
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

service接口

public interface UserService {
    //验证登录
    User login(String username, String password);
}

service实现类

@Service
public class UserServiceImpl implements UserService{

    @Autowired
    UserMapper userMapper;

    @SysLog("业务层:登录验证")
    @Override
    public User login(String username, String password) {
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getUsername,username).eq(User::getPassword,password);
        return userMapper.selectOne(queryWrapper);
    }
}

测试

@SpringBootTest
@EnableAspectJAutoProxy
public class UserTest {

    @Test
    void testLogin(){
        Object o2 = userService.login("admin", "123456");
        System.out.println(o2);
    }

}

控制台打印

image-20221122225141732

当然,还可以在application.yaml配置文件中进行相应配置,把日志输出到指定位置

logging:
  file:
    path: ./logs
    name: log.log
  level:
    root:
      java: info
    com:
      wae: debug

image-20221122225655358

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Steph Wae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值