完成操作日志的存储

This commit is contained in:
YunaiV
2021-01-17 01:21:54 +08:00
parent ec8f181f2f
commit 30076f6472
7 changed files with 82 additions and 30 deletions

View File

@ -6,7 +6,6 @@ import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.Map;
/**
* 操作日志 Base VO提供给添加、修改、详细的子 VO 使用
@ -56,7 +55,7 @@ public class SysOperateLogBaseVO {
private String javaMethod;
@ApiModelProperty(value = "Java 方法的参数")
private Map<String, Object> javaMethodArgs;
private String javaMethodArgs;
@ApiModelProperty(value = "开始时间", required = true)
@NotNull(message = "开始时间不能为空")

View File

@ -24,6 +24,16 @@ import java.util.Map;
@EqualsAndHashCode(callSuper = true)
public class SysOperateLogDO extends BaseDO {
/**
* {@link #javaMethodArgs} 的最大长度
*/
public static final Integer JAVA_METHOD_ARGS_MAX_LENGTH = 8000;
/**
* {@link #resultData} 的最大长度
*/
public static final Integer RESULT_MAX_LENGTH = 4000;
/**
* 日志主键
*/
@ -54,6 +64,7 @@ public class SysOperateLogDO extends BaseDO {
*
* 枚举 {@link SysOperateLogTypeEnum}
*/
@TableField("operate_type")
private Integer type;
/**
* 操作内容,记录整个操作的明细
@ -94,9 +105,12 @@ public class SysOperateLogDO extends BaseDO {
private String javaMethod;
/**
* Java 方法的参数
*
* 实际格式为 Map<String, Object>
* 不使用 @TableField(typeHandler = FastjsonTypeHandler.class) 注解的原因是,数据库存储有长度限制,会进行裁剪,会导致 JSON 反序列化失败
* 其中key 为参数名value 为参数值
*/
@TableField(typeHandler = FastjsonTypeHandler.class)
private Map<String, Object> javaMethodArgs;
private String javaMethodArgs;
/**
* 开始时间
*/

View File

@ -5,12 +5,15 @@ import cn.iocoder.dashboard.modules.system.convert.logger.SysOperateLogConvert;
import cn.iocoder.dashboard.modules.system.dal.mysql.dao.logger.SysOperateLogMapper;
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.logger.SysOperateLogDO;
import cn.iocoder.dashboard.modules.system.service.logger.SysOperateLogService;
import cn.iocoder.dashboard.util.string.StrUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import static cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.logger.SysOperateLogDO.*;
@Service
@Slf4j
public class SysOperateLogServiceImpl implements SysOperateLogService {
@ -21,8 +24,10 @@ public class SysOperateLogServiceImpl implements SysOperateLogService {
@Override
@Async
public void createOperateLogAsync(SysOperateLogCreateReqVO reqVO) {
SysOperateLogDO logDO = SysOperateLogConvert.INSTANCE.convert(reqVO);
try {
SysOperateLogDO logDO = SysOperateLogConvert.INSTANCE.convert(reqVO);
logDO.setJavaMethodArgs(StrUtils.maxLength(logDO.getJavaMethodArgs(), JAVA_METHOD_ARGS_MAX_LENGTH));
logDO.setResultData(StrUtils.maxLength(logDO.getResultData(), RESULT_MAX_LENGTH));
operateLogMapper.insert(logDO);
} catch (Throwable throwable) {
// 仅仅打印日志,不对外抛出。原因是,还是要保留现场数据。