一、设计:
操作日志记录 根据业务场景 一般是需要记录下数据修改更新的日志,查询类可以忽略。 所以需要对指定的某些方法进行记录。这块希望可以结合注解灵活操作,对于注解的方法进行日志记录
操作日志表设计如下:
CREATE TABLE `op_log` (
`id` bigint(20) NOT NULL COMMENT '主键',
`operator` varchar(32) NOT NULL COMMENT '操作者',
`method` varchar(100) NOT NULL COMMENT '请求方法',
`request_url` varchar(125) NOT NULL COMMENT '请求URL',
`param` varchar(512) NOT NULL COMMENT '参数',
`ip` int(10) NOT NULL COMMENT '请求IP',
`create_time` bigint(20) NOT NULL COMMENT '创建时间',
`op_time` bigint(20) NOT NULL COMMENT '操作时间',
`is_valid` tinyint(4) NOT NULL COMMENT '是否有效(0-无效 1-有效)',
`last_ver` int(8) NOT NULL COMMENT '版本号',
PRIMARY KEY (`id`),
KEY `idx_request_url` (`request_url`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='操作记录表'
web层应用入口直接进行日志记录,有两个选项,通过拦截器过滤器在http请求之前或者之后搞事情,通过切面,对着两个方案进行评估,最后选择了切面来进行记录
1.拦截器 过滤器 可以获取到httpRequest信息 从而获取请求IP等属性 ,但是对于某些请求我们不需要记录日志,灵活性上面很差,并且获取不到方法名称,类信息,无法跟注解结合使用
2.切面有org.aspectj.lang.ProceedingJoinPoint连接点对象,可以获取目标对象,切点的参数等等,对于ip和会话信息获取不到,可以采用threadLocal每个连接维护session的方法
threadLo