简介
无论在什么系统中,日志管理模块都属于十分重要的部分,接下来会通过注解+AOP+MQ的方式实现一个简易的日志管理系统
思路
-
注解: 标记需要记录日志的方法
-
AOP: 通过AOP增强代码,利用后置/异常通知的方式获取相关日志信息,最后使用MQ将日志信息发送到专门处理日志的系统
-
RabbitMQ: 利用解耦、异步的特性,协调完成各个微服务系统之间的通信
1、日志表结构
表结构(sys_log):
CREATE TABLE `sys_log` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一ID',
`opt_id` int(11) DEFAULT NULL COMMENT '操作用户id',
`opt_name` varchar(50) DEFAULT NULL COMMENT '操作用户名',
`log_type` varchar(20) DEFAULT NULL COMMENT '日志类型',
`log_message` varchar(255) DEFAULT NULL COMMENT '日志信息(具体方法名)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='系统日志表';
实体类(SysLog):
@Data
public class SysLog {
private static final long serialVersionUID = 1L;
/**
* 唯一ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 操作用户id
*/
private Integer optId;
/**
* 操作用户名
*/
private String optName;
/**
* 日志类型
*/
private String logType;
/**
* 日志信息(具体方法名)
*/
private String logMessage;
/**
* 创建时间
*/
private Date createTime;
}
2、注解
注解(SystemLog):
仅作为标记的作用,目的让JVM可以识别,然后可以从中获取相关信息
-
@Target: 定义注解作用的范围,这里是方法
-
@Retention: 定义注解生命周期,这里是运行时
@Target(ElementType.METHOD)
@Retention(Retention