Springboot - 注解 - 操作日志< bizlog-sdk>
此组件解决的问题是:
「谁」在「什么时间」对「什么」做了「什么事」
用户登录后,调用后台接口接口,把token对应的用户信息存入redis.
后台通过header获取token,再根据token查询redis中对应用户信息。
2023-09-22更新
@LogRecord(subType = "查询:异常扣款数据列表", success = "{{#_ret}}", type = "1", bizNo = "")
boolean contains = logRecord.getAction().contains("code=200");
//接口返回数据:成功返回success,失败反回 fail的值。要想返回fail值 ,必须抛出异常,这里用的try...catch...,所以都只返回success的值 。这里我们在获取action的时候,通过接口自定义返回值的code来判断是否成功。
// subType 这里用来记录操作明细,type 用来记录操作的菜单,这里可以根据业务自行定义
@LogRecord(subType = "{{#phoneRecordType==1? '查询:非催收电话联系反馈记录查询' : '查询:催收-电话催收反馈记录查询'}}", success = "{{#_ret}}", type = "{{#phoneRecordType==1? '3' : '6'}}", bizNo = "")
public AjaxResult<List<NonTelephoneRecordOutput>> queryCollectTelephoneRecord(@RequestBody NonTelephoneRecordInput input) {
LogRecordContext.putVariable("phoneRecordType", Integer.valueOf(input.getPhoneRecordType()));
}
// 我们可以放置变量,来进行三元表达的运算。
// 通过条件,存储相应的操作日志明细
使用方式
基本使用
maven 依赖添加 SDK 依赖
<dependency>
<groupId>io.github.mouzt</groupId>
<artifactId>bizlog-sdk</artifactId>
<version>1.0.8</version>
</dependency>
SpringBoot 入口打开开关, 添加 @EnableLogRecord 注解
tenant 是代表租户的标识,一般一个服务或者一个业务下的多个服务都写死一个 tenant 就可以
@EnableLogRecord(tenant = "com.ctfo.mccntr")
public class DeviceMaintenanceCenterApplication {
}
普通的记录日志
- pefix:是拼接在 bizNo 上作为 log 的一个标识。避免 bizNo 都为整数 ID 的时候和其他的业务中的 ID
重复。比如订单 ID、用户 ID 等 - bizNo:就是业务的 ID,比如订单 ID,我们查询的时候可以根据 bizNo 查询和它相关的操作日志
- success:方法调用成功后把 success 记录在日志的内容中
- SpEL 表达式:其中用双大括号包围起来的(例如:{{#order.purchaseName}})#order.purchaseName
是 SpEL 表达式。Spring 中支持的它都支持的。比如调用静态方法,三目表达式。SpEL 可以使用方法中的任何参数
其中的 #_errorMsg 是取的方法抛出异常后的异常的 errorMessage。
@LogRecordAnnotation(success = "巡检工单查询成功",fail = "巡检工单查询成功失败,失败原因:「{{#_errorMsg}}」",
prefix = "1234", bizNo = "{{#pageQuery.userId}}")
public RestResponse<PageInfo<InspectionTaskOutput>> list(@Valid @RequestBody InspectionTaskPageQuery pageQuery) throws Exception {}
持久化日志
- 通过cookie可以获取前端缓存的用户相关信息
- 新建service实现ILogRecordService类,即可在此对数据进行存储操作。
@Service
public class DbLogRecordServiceImpl implements ILogRecordService {
@Override
public void record(LogRecord logRecord) {
System.out.println("===========logRecord:{}" + JSON.toJSONString(logRecord));
//db.insertLog() 持久化日志信息
}
@Override
public List<LogRecord> queryLog(String bizKey) {
return null;
}
@Override
public List<LogRecord> queryLogByBizNo(String bizNo) {
return null;
}
}