【java】基于注解的日志处理

java

基于注解和AOP实现的自定义日志系统。只需要两个类就能实现:

1. 注解类:设置自定义属性属性

2. 切面类:用于横切注解,获取注解属性值,保存日志

方法一

注解类:

//注解类 

//属性可以根据需要自行添加

@Target({ElementType.TYPE, ElementType.METHOD})//目标是方法

@Retention(RetentionPolicy.RUNTIME)//注解会在class中存在,运行时可通过反射获取

//@Inherited

@Documented

public @interface SysLog {

/**

* 描述

*/

String description() default "";

/**

* 行为类型

* 1.违规行为;2.异常行为;3 一般行为

*/

String behaviourType() default "3";

/**

* 日志风险级别

* 1紧急、2重要、3一般、4信息

*/

String level() default "4";

}

切面类:

@Aspect//声明这是一个事务切面

@Slf4j

@Component//让其被spring管理

public class SysLogAspect {

@Around("@annotation(sysLog)")

@SneakyThrows

public void around(ProceedingJoinPoint point, SysLog sysLog) {

//-----------环绕通知开始-----------

//保存日志的逻辑

Object obj = point.proceed();

//-----------环绕通知结束-----------

//根据obj结果更新日志逻辑

}

}

测试类:

//测试类

@SysLog(description = "这是一个测试",behaviourType = "1",level = "2")

@PostMapping("/test")

public String getTest(){

//业务逻辑

//...

return "test";

}

 

方法二

 

其余一致,切面类做了修改:

@Aspect//声明这是一个事务切面

@Slf4j

@Component//让其被spring管理

public class SysLogAspect {

//声明切点

@Pointcut("@annotation(com.xx.xx.SysLog)")

public void logPointCut(){}

//执行的先后顺序是 环绕通知开始-->前置通知before-->后置通知after-->环绕通知结束

@Around("logPointCut()")

@SneakyThrows

public void around(ProceedingJoinPoint point, SysLog sysLog) {

//-----------环绕通知开始-----------

//ProceedingJoinPoint只能用于环绕通知,此参数写在前置和后置通知中会报错

//获取request、response

ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestCOntextHolder.getRequestAttributes();

HttpServletRequest request = servletRequestAttributes.getRequest();

//保存日志的逻辑

//相当于自己写在controller中的代码

Object obj = point.proceed();

//-----------环绕通知结束-----------

//根据obj结果更新日志逻辑

}

//此外还可以加上前置通知 后置通知等

@Before("logPointCut()")

public void doBefore(JoinPoint point){

//可通过point获取方法名和类名

String className = point.getTarget().getClass().getName();

String methodName = point.getSignature().getName();

}

@After("logPointCut()")

public void doAfter(JoinPoint point){

}

}

持续更新!!!

以上是 【java】基于注解的日志处理 的全部内容, 来源链接: utcz.com/z/394799.html

回到顶部