操作日志技术方案

 借着项目需要编写切面日志,这里提供简单实现方案

1.创建操作类型枚举类

public enum OperationEnum {
		CREATE("create", "创建"),
		SIGN("sign", "签到");

    	private final String value;
		private final String label;
	}

2.自定义注解LogAnnotate

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogAnnotate {
    OutageTicketOperationEnum value();
}

3.给需要添加日志切面的方法,添加日志跟踪参数,抽成为Base,其他所有入参继承Base

public class Base {
    private String operationId;
    private String operationCoreParam;
}

4.编写切面

@Aspect
@Component
public class LogAspect {
    @Resource
    private LogFeign logFeign;

    @Pointcut("@annotation(com.pk.infrastructure.aop.LogAnnotate)")
    public void logOperation() {}

    /**
     * 环绕是最后执行的
     */
    @Around("logOperation()&&@annotation(logAnnotate)")
    public Object doAround(ProceedingJoinPoint point, LogAnnotate logAnnotate) throws Throwable{
        Object result = point.proceed();//执行切点
		//获取自定义注解的信息,操作类型
        logger.info("LogAOP param value:{}", logAnnotate.value());
		//获取入参
        final JSONObject obj = (JSONObject) Arrays.stream(point.getArgs())
                                                  .findFirst()
                                                  .map(JSONObject::toJSON)
                                                  .orElseGet(JSONObject::new);
        log.info("操作编号:{},操作核心参数:{}",obj.get("operationId"),obj.get("operationCoreParam"))
		//doSomeThings
        return result;
    }
}

5.应用层方法使用注解,同时返回当前操作的主键

@Service
public class ApplicationService {
	private final OutageTicketRepository outageTicketRepository
	
	@LogAnnotate(OperationEnum.SIGN)
	public String addSignAddress(SignAddress command) {
	   return repository.addSignAddress(command)
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值