Springboot⾃定义注解实现操作⽇志管理
操作⽇志的记录
为什么要有⽇志?
因为我们不光要记录代码的运⾏,如(logback log4j),⽽且还应该记录⽤户的⾏为,这叫做业务运⾏⽇志
例如:记录 zhangsan 在项⽬中 调⽤了哪个⽅法, 什么时间调⽤的 。访问的ip地址, 访问了哪些数据,做了什么操作,以此当程序出现问题的时候更利于我们进⾏错误的排查!
业务运⾏⽇志的作⽤
1. 记录⽤户的⾏为 ⽤于后续的分析
springboot aop
2. 记录⽤户的所有的操作
业务运⾏⽇志最常⽤的使⽤场景:记录管理员所有的⾏为操作, 可以⽤于业务分析,事故恢复
⽇志实现的思路
1.我们需要记录哪些数据 存⼊数据库
这⾥列出⼀个我所⽤的表结构,如下所⽰:
字段含义
log_id主键
log_date时间
log_content操作内容 例如:查询全部菜单信息 添加⽤户数据
log_name_id⽤户的id
log_ip⽤户的ip地址
log_type操作类型
2.在项⽬中什么位置记录
⽇志记录是⼀个数据库的添加操作 是⼀段代码
通常,我们在Controller⽅法进⾏后置增强
如下图所⽰,我们在需要记录操作的controller上使⽤aop配置⼀个切⼊点,以此来记录⽤户所进⾏的操作
3.如何实现记录功能
实现⽅式:AOP
4.A op⽇志记录 具体代码实现
aop的使⽤流程,这⾥使⽤注解式aop来实现
具体步骤:
1. 设置切⼊点
1. 可以切在⽅法上
2. 可以切在注解上
@Transactional 事务注解注解加在类上 aop 切在注解上
2. 写增强 ⽇志记录增强
1. 获取⽇志的相关信息
⽤户的id ip地址, 时间, 操作的描述, 类型等信息
2. 将⽇志对象 添加到数据库
增强⽅法的编写
增强⽅法中获取session
因为我们是通过aop来获取⽤户的请求的,所以就需要通过当前的请求拿到session,进⽽去获取⽤户的信息。
但是,操作的描述如何获取呢?
⽐如执⾏的⽅法不同描述是不⼀样的
login            管理员登录
selectAllMenu  查询了所有的菜单
解决⽅案:使⽤⾃定义注解:
1. 在 ⽬标 ⽅法上添加⾃定义注解 (@Log) 如下
2. 在增强中获取注解(@Log)的value 和 type
代码实现
⾃定义⽇志注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 元注解:加在⾃定义注解上的注解
* @Target 定义注解可以添加的位置 METHOD ⽅法上 type 类上
* @Retention RUNTIME 运⾏时不管编译还是运⾏这个注解都可以⽤ *
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogAnnotation {
/**
* 写法类似于接⼝的⽅法后⾯可以通过default 关键字给默认值
* ⽤法类似于属性
* @return
*/
String value()default"";
String type()default"";
}
这⾥要注意什么是元注解,和 注解属性的定义⽅式
2. 在⽬标⽅法上使⽤注解
3. 在增强⽅法中获取注解的value 和 type
/**
* 操作的描述
*
* 执⾏的⽅法不同描述是不⼀样的
* login        管理员登录
* selectAllGuru 查询了所有的上师
*
* 获取注解的值
*/
//        1.通过连接点获取⽅法签名被切⼊⽅法的所有信息
MethodSignature signature =(MethodSignature) Signature(); //        2.获取被切⼊⽅法对象
Method method = Method();
//        3.获取⽅法上的注解
LogAnnotation annotation = Annotation(LogAnnotation.class); //        4.获取注解的值
String value = annotation.value();
完整的aop的代码实现
fig;
/**
* @author 马超伟
* @PROJECT_NAME: fzll
* @Description:
* @date 15:29
* @Copyright: All rights Reserved, Designed By Huerdai
* Copyright:    Copyright(C) 2019-2020
* Company      Huerdai Henan LTD.
*/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。