SpringBoot自定义注解实现日志记录

SpringBoot自定义注解实现日志记录

业务描述:需要记录系统中谁操作了那个方法,参数是什么,做个简单的日志查看。需要添加依赖,然后写注解类,配置切面,在启动类启用即可。下面是具体步骤:

1.添加依赖,主要是加这2个依赖,日志等依赖根据实际情况添加

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.编写注解类Ulog

@Documented
@Target({ElementType.METHOD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Ulog {
String msg() default “No Msg”;//操作标识,用来表明这个方法是做什么的,会保存在日志里
}

3.编写切面来拦截日志

@Aspect
@Component
public class UlogAspect {
//这里是Ulog注解的路径,注意此方法不能有返回值
@Pointcut(“@annotation(com.redies.demo.log.Ulog)”)
public  void annotationPointCut() {
}@Before(“annotationPointCut()”)
public void before(JoinPoint joinPoint) throws UnsupportedEncodingException {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();joinPoint.proceed();//让目标方法执行,具体见下面解释
MethodSignature sign =  (MethodSignature)joinPoint.getSignature();
Method method = sign.getMethod();
Ulog ulog=method.getAnnotation(Ulog.class);
System.out.println(“方法名称:”+method.getName());
System.out.println(“方法类型:”+request.getMethod());
System.out.println(“业务标识:”+ulog.msg());
System.out.println(“请求地址:”+request.getRequestURI()+”&”+(request.getQueryString()==null?””: URLDecoder.decode(request.getQueryString(), “UTF-8”)));
}

}

4.启用对切面的支持

在启动类上加注解@EnableAspectJAutoProxy

 

另外:关于操作人,根据实际登录逻辑添加。环绕通知 ProceedingJoinPoint 执行proceed方法的作用是让目标方法执行,这也是环绕通知和前置、后置通知方法的一个最大区别。简单理解,环绕通知=前置+目标方法执行+后置通知,proceed方法就是用于启动目标方法执行的。

 

本站的文章多是老王开发工作中问题的记录,一个字一个字敲的,切实可行,可以分享,需要留个原文链接,至少也意思意思吧!
vsalw技术博客 » SpringBoot自定义注解实现日志记录

你想下载这个主题吗?

沟通一下 扯会蛋