日志操作
概述
在实际开发中,对于某些关键业务,我们通常需要记录该操作的内容,一个操作调一次记录方法,每次需收集参数等等,会造成大量代码重复。
我们希望代码中只有业务相关的操作,在项目中使用注解来完成此项功能。
快速上手
1、在业务模块的pom
文件中添加依赖
html
<!--pangea公共工具包 -->
<dependency>
<groupId>com.hisense.pangea</groupId>
<artifactId>pangea-common-log</artifactId>
<version>${pangea.version}</version>
</dependency>
2、在需要被记录日志的controller方法上添加@Log注解,使用方法如下:
java
@PostMapping("save")
@Log(title = "规则组", businessType = BusinessType.INSERT)
public int addSave(@RequestBody RuleGroup ruleGroup) {
return ruleGroupService.insertRuleGroup(ruleGroup);
}
支持参数如下:
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
title | String | 空 | 操作模块 |
businessType | BusinessType | OTHER | 操作功能(OTHER其他 INSERT新增 UPDATE修改 DELETE删除 GRANT授权 EXPORT导出 IMPORT导入 FORCE强退 GENCODE生成代码 CLEAN清空数据) |
operatorType | OperatorType | MANAGE | 操作人类别(OTHER其他 MANAGE后台用户 MOBILE手机端用户) |
isSaveRequestData | boolean | true | 是否保存请求的参数 |
逻辑实现代码com.hisense.pangea.log.aspect.LogAspect
3、本地存储日志
可通过在yml配置文件中配置
pangea:
log:
local_storage: true
local_storage 该项如不配置或者配置为false,则日志存储到盘古数据库;配置为true,并且实现log组件中的方法则存储到本地数据库。实现类demo参考如下:
@Component(value = "demoLogServiceImpl")
@Primary
public class DemoLogServiceImpl implements AsyncLogService {
@Autowired
SysOperLogMapper operLogMapper;
@Override
@ConditionalOnMissingBean(DemoLogServiceImpl.class)
public void saveSysLog(OperationLog operationLog) {
HttpServletRequest request = ServletUtils.getRequest();
String systemName = request.getHeader(Constants.CURRENT_SYSTEMNAME);
operationLog.setOperTime(DateUtils.getNowDate());
SysOperLog sysOperLog = new SysOperLog();
BeanUtils.copyProperties(operationLog, sysOperLog);
sysOperLog.setSystemName(systemName);
operLogMapper.insertOperlog(sysOperLog);
}
}
如没有SysOperLog类,需创建
@Data
@EqualsAndHashCode(callSuper = false)
public class SysOperLog extends BaseEntity {
private static final long serialVersionUID = -5556121284445360558L;
/**
* 日志主键
*/
private Long operId;
/**
* 操作模块
*/
private String title;
/**
* 业务类型(0其它 1新增 2修改 3删除)
*/
private Integer businessType;
/**
* 请求方法
*/
private String method;
/**
* 请求方式
*/
private String requestMethod;
/**
* 操作类别(0其它 1后台用户 2手机端用户)
*/
private Integer operatorType;
/**
* 操作人员
*/
private String operName;
/**
* 部门名称
*/
private String deptName;
/**
* 请求url
*/
private String operUrl;
/**
* 操作地址
*/
private String operIp;
/**
* 操作地点
*/
private String operLocation;
/**
* 请求参数
*/
private String operParam;
/**
* 操作状态(0正常 1异常)
*/
private Integer status;
/**
* 错误消息
*/
private String errorMsg;
/**
* 操作时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date operTime;
/**
* 业务类型数组
*/
@TableField(exist = false)
private Integer[] businessTypes;
/**
* 返回参数
*/
private String jsonResult;
/**
* apm跟踪ID
*/
@TableField(exist = false)
private String traceId;
/**
* 系统名称
*/
private String systemName;
}
同时需要确认是否有SYS_OPER_LOG该表,没有则需创建,建表语句如下:
CREATE TABLE
SYS_OPER_LOG
(
OPER_ID NUMBER(11),
TITLE VARCHAR2(50),
BUSINESS_TYPE NUMBER(2),
METHOD VARCHAR2(100),
REQUEST_METHOD VARCHAR2(10),
OPERATOR_TYPE NUMBER(1),
OPER_NAME VARCHAR2(50),
DEPT_NAME VARCHAR2(50),
OPER_URL VARCHAR2(255),
OPER_IP VARCHAR2(255),
OPER_LOCATION VARCHAR2(255),
OPER_PARAM VARCHAR2(4000),
STATUS NUMBER(1),
ERROR_MSG VARCHAR2(4000),
OPER_TIME TIMESTAMP(6),
JSON_RESULT VARCHAR2(2000),
SYSTEM_NAME VARCHAR2(255),
CREATED_BY VARCHAR2(255),
CREATED_DATE TIMESTAMP(6),
MODIFIED_BY VARCHAR2(255),
MODIFIED_DATE TIMESTAMP(6),
REMARK VARCHAR2(255)
);
operLogMapper中需要自己写一个插入方法
自定义操作功能(businessType)
在
BusinessType
中新增业务操作类型如:java/** * 测试 */ TEST,
在
sys_dict_data
字典数据表中初始化操作业务类型javainsert into sys_dict_data values(25, 10, '测试', '10', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '测试操作');
在
controller
中使用注解java@Log(title = "测试标题", businessType = BusinessType.TEST)
使用效果
操作日志
操作日志用于记录系统访问用户的操作记录, 可记录系统模块、操作类型、操作人员、主机、状态、操作时间和该操作具体详情等相关信息。
注意
点击清空按钮会将数据库中的数据记录删除掉,点击导出按钮,可以将操作日志全部导出。
可点击数据行操作列的详细按钮查看该操作记录的操作模块、操作方法,操作方法对应的请求地址、请求方式及参数等信息。
请求地址
(对应后端接口路径)参数
(对应后端接口的传参)状态
(表示该接口的执行状态)
登录日志
登录日志用于记录用户登录系统的历史记录,可记录登录账号、登录ip地址、登录地点、访问浏览器、操作系统、状态、操作信息和操作时间等信息。
注意
点击清空按钮会将数据库中的数据记录删除掉
在线用户管理
在线用户管理用于查询当前登录用户的基本信息,包括登录账号、部门名称、主机、登录地点、浏览器、操作系统以及操作时间这些信息。 点击退出登录,当前用户将被强制退出。
定时任务管理
定时任务管理可以新增、编辑、删除任务,还可以进行导出和日志操作。