1. 限制记录 api 日志的字段长度

2. 完整记录所有的 databus api 的请求日志
3. 新增 iwork 同步可以按 id 维度进行
4. 新增自动扫描 BusinessBaseDO 的 公司部门数据权限模式
This commit is contained in:
chenbowen
2025-12-01 17:46:42 +08:00
parent e9542acd27
commit 95d905e76f
15 changed files with 606 additions and 66 deletions

View File

@@ -3,6 +3,7 @@ package com.zt.plat.module.infra.service.logger;
import com.zt.plat.framework.common.biz.infra.logger.dto.ApiErrorLogCreateReqDTO;
import com.zt.plat.framework.common.enums.UserTypeEnum;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.string.StrUtils;
import com.zt.plat.framework.test.core.ut.BaseDbUnitTest;
import com.zt.plat.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO;
import com.zt.plat.module.infra.dal.dataobject.logger.ApiErrorLogDO;
@@ -13,6 +14,7 @@ import org.springframework.context.annotation.Import;
import jakarta.annotation.Resource;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
import static cn.hutool.core.util.RandomUtil.randomEle;
@@ -79,15 +81,63 @@ public class ApiErrorLogServiceImplTest extends BaseDbUnitTest {
@Test
public void testCreateApiErrorLog() {
// 准备参数
ApiErrorLogCreateReqDTO createDTO = randomPojo(ApiErrorLogCreateReqDTO.class);
// 准备参数:手动设置多个超长字段,确保持久化前会被截断
ApiErrorLogCreateReqDTO createDTO = new ApiErrorLogCreateReqDTO();
createDTO.setTraceId(repeat('t', ApiErrorLogDO.TRACE_ID_MAX_LENGTH + 20));
createDTO.setUserId(10086L);
createDTO.setUserType(UserTypeEnum.ADMIN.getValue());
createDTO.setApplicationName(repeat('a', ApiErrorLogDO.APPLICATION_NAME_MAX_LENGTH + 5));
createDTO.setRequestMethod(repeat('b', ApiErrorLogDO.REQUEST_METHOD_MAX_LENGTH + 10));
createDTO.setRequestUrl(repeat('c', ApiErrorLogDO.REQUEST_URL_MAX_LENGTH + 20));
createDTO.setRequestParams(repeat('d', ApiErrorLogDO.REQUEST_PARAMS_MAX_LENGTH + 50));
createDTO.setUserIp(repeat('1', ApiErrorLogDO.USER_IP_MAX_LENGTH + 10));
createDTO.setUserAgent(repeat('e', ApiErrorLogDO.USER_AGENT_MAX_LENGTH + 100));
createDTO.setExceptionTime(LocalDateTime.of(2025, 1, 1, 10, 20, 30));
createDTO.setExceptionName(repeat('f', ApiErrorLogDO.EXCEPTION_NAME_MAX_LENGTH + 10));
createDTO.setExceptionClassName(repeat('g', ApiErrorLogDO.EXCEPTION_CLASS_NAME_MAX_LENGTH + 10));
createDTO.setExceptionFileName(repeat('h', ApiErrorLogDO.EXCEPTION_FILE_NAME_MAX_LENGTH + 10));
createDTO.setExceptionMethodName(repeat('i', ApiErrorLogDO.EXCEPTION_METHOD_NAME_MAX_LENGTH + 10));
createDTO.setExceptionLineNumber(256);
createDTO.setExceptionStackTrace(repeat('s', ApiErrorLogDO.EXCEPTION_STACK_TRACE_MAX_LENGTH + 100));
createDTO.setExceptionRootCauseMessage(repeat('r', ApiErrorLogDO.EXCEPTION_ROOT_CAUSE_MESSAGE_MAX_LENGTH + 80));
createDTO.setExceptionMessage(repeat('m', ApiErrorLogDO.EXCEPTION_MESSAGE_MAX_LENGTH + 60));
// 调用
apiErrorLogService.createApiErrorLog(createDTO);
// 断言
ApiErrorLogDO apiErrorLogDO = apiErrorLogMapper.selectOne(null);
assertPojoEquals(createDTO, apiErrorLogDO);
assertEquals(createDTO.getUserId(), apiErrorLogDO.getUserId());
assertEquals(createDTO.getUserType(), apiErrorLogDO.getUserType());
assertEquals(createDTO.getExceptionTime(), apiErrorLogDO.getExceptionTime());
assertEquals(createDTO.getExceptionLineNumber(), apiErrorLogDO.getExceptionLineNumber());
assertEquals(ApiErrorLogProcessStatusEnum.INIT.getStatus(), apiErrorLogDO.getProcessStatus());
assertTruncated(createDTO.getTraceId(), apiErrorLogDO.getTraceId(), ApiErrorLogDO.TRACE_ID_MAX_LENGTH);
assertTruncated(createDTO.getApplicationName(), apiErrorLogDO.getApplicationName(),
ApiErrorLogDO.APPLICATION_NAME_MAX_LENGTH);
assertTruncated(createDTO.getRequestMethod(), apiErrorLogDO.getRequestMethod(),
ApiErrorLogDO.REQUEST_METHOD_MAX_LENGTH);
assertTruncated(createDTO.getRequestUrl(), apiErrorLogDO.getRequestUrl(),
ApiErrorLogDO.REQUEST_URL_MAX_LENGTH);
assertTruncated(createDTO.getRequestParams(), apiErrorLogDO.getRequestParams(),
ApiErrorLogDO.REQUEST_PARAMS_MAX_LENGTH);
assertTruncated(createDTO.getUserIp(), apiErrorLogDO.getUserIp(), ApiErrorLogDO.USER_IP_MAX_LENGTH);
assertTruncated(createDTO.getUserAgent(), apiErrorLogDO.getUserAgent(),
ApiErrorLogDO.USER_AGENT_MAX_LENGTH);
assertTruncated(createDTO.getExceptionName(), apiErrorLogDO.getExceptionName(),
ApiErrorLogDO.EXCEPTION_NAME_MAX_LENGTH);
assertTruncated(createDTO.getExceptionClassName(), apiErrorLogDO.getExceptionClassName(),
ApiErrorLogDO.EXCEPTION_CLASS_NAME_MAX_LENGTH);
assertTruncated(createDTO.getExceptionFileName(), apiErrorLogDO.getExceptionFileName(),
ApiErrorLogDO.EXCEPTION_FILE_NAME_MAX_LENGTH);
assertTruncated(createDTO.getExceptionMethodName(), apiErrorLogDO.getExceptionMethodName(),
ApiErrorLogDO.EXCEPTION_METHOD_NAME_MAX_LENGTH);
assertTruncated(createDTO.getExceptionStackTrace(), apiErrorLogDO.getExceptionStackTrace(),
ApiErrorLogDO.EXCEPTION_STACK_TRACE_MAX_LENGTH);
assertTruncated(createDTO.getExceptionRootCauseMessage(), apiErrorLogDO.getExceptionRootCauseMessage(),
ApiErrorLogDO.EXCEPTION_ROOT_CAUSE_MESSAGE_MAX_LENGTH);
assertTruncated(createDTO.getExceptionMessage(), apiErrorLogDO.getExceptionMessage(),
ApiErrorLogDO.EXCEPTION_MESSAGE_MAX_LENGTH);
}
@Test
@@ -161,4 +211,12 @@ public class ApiErrorLogServiceImplTest extends BaseDbUnitTest {
assertPojoEquals(log02, logs.get(0), "createTime", "updateTime");
}
private static void assertTruncated(String source, String actual, int maxLength) {
assertEquals(StrUtils.maxLength(source, maxLength), actual);
}
private static String repeat(char ch, int length) {
return String.valueOf(ch).repeat(Math.max(length, 0));
}
}