From 16fbe7dc09b35a3a5b8f7f2dab60a0fc05befdbc Mon Sep 17 00:00:00 2001 From: Leo <98382335+gaoziman@users.noreply.github.com> Date: Mon, 7 Jul 2025 22:42:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8F=92=E4=BB=B6=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建操作日志插件模块,实现可插拔式日志记录功能 - 添加@EnableOperLog注解实现插件自动配置 - 添加@OperLog注解支持方法级别的操作日志记录 - 实现AOP切面处理,自动拦截并记录操作信息 - 配置异步日志记录服务,提升系统性能 - 更新插件父模块POM配置,纳入构建管理 --- .../coder-common-thin-oper-logs/pom.xml | 33 +++++++++++++--- .../operlog/annotation/EnableOperLog.java | 9 +++-- .../thin/operlog/annotation/OperLog.java | 8 ++-- .../thin/operlog/aspect/OperLogAspect.java | 39 ++++++++++--------- .../operlog/config/OperLogAsyncConfig.java | 5 ++- .../operlog/service/OperLogAsyncService.java | 17 ++++---- coder-common-thin-plugins/pom.xml | 1 + 7 files changed, 70 insertions(+), 42 deletions(-) diff --git a/coder-common-thin-plugins/coder-common-thin-oper-logs/pom.xml b/coder-common-thin-plugins/coder-common-thin-oper-logs/pom.xml index 2c9d15a..728d3ab 100644 --- a/coder-common-thin-plugins/coder-common-thin-oper-logs/pom.xml +++ b/coder-common-thin-plugins/coder-common-thin-oper-logs/pom.xml @@ -6,15 +6,36 @@ org.leocoder.thin coder-common-thin-plugins - 1.0.0 + ${revision} + coder-common-thin-oper-logs coder-common-thin-oper-logs + 异步操作日志功能插件;支持AOP切面自动记录操作日志 - - 17 - 17 - UTF-8 - + + + + org.leocoder.thin + coder-common-thin-common + ${revision} + + + + org.leocoder.thin + coder-common-thin-model + ${revision} + + + + org.springframework.boot + spring-boot-starter-aop + + + + org.springframework.boot + spring-boot-starter-data-redis + + \ No newline at end of file diff --git a/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/annotation/EnableOperLog.java b/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/annotation/EnableOperLog.java index 9457ecc..097ac51 100644 --- a/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/annotation/EnableOperLog.java +++ b/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/annotation/EnableOperLog.java @@ -1,9 +1,10 @@ -package org.leocoder.operlog.annotation; +package org.leocoder.thin.operlog.annotation; -import org.leocoder.operlog.aspect.OperLogAspect; -import org.leocoder.operlog.config.OperLogAsyncConfig; -import org.leocoder.operlog.service.OperLogAsyncService; +import org.leocoder.thin.operlog.aspect.OperLogAspect; +import org.leocoder.thin.operlog.config.OperLogAsyncConfig; +import org.leocoder.thin.operlog.service.OperLogAsyncService; import org.springframework.context.annotation.Import; + import java.lang.annotation.*; /** diff --git a/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/annotation/OperLog.java b/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/annotation/OperLog.java index c435ee8..9d84f43 100644 --- a/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/annotation/OperLog.java +++ b/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/annotation/OperLog.java @@ -1,7 +1,9 @@ -package org.leocoder.operlog.annotation; +package org.leocoder.thin.operlog.annotation; + + +import org.leocoder.thin.domain.enums.oper.OperType; +import org.leocoder.thin.domain.enums.oper.SystemType; -import org.leocoder.domain.enums.oper.OperType; -import org.leocoder.domain.enums.oper.SystemType; import java.lang.annotation.*; /** diff --git a/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/aspect/OperLogAspect.java b/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/aspect/OperLogAspect.java index edf4ab2..e411f55 100644 --- a/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/aspect/OperLogAspect.java +++ b/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/aspect/OperLogAspect.java @@ -1,4 +1,4 @@ -package org.leocoder.operlog.aspect; +package org.leocoder.thin.operlog.aspect; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -12,15 +12,15 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; -import org.leocoder.common.satoken.CoderLoginUtil; -import org.leocoder.common.utils.date.DateUtil; -import org.leocoder.common.utils.ip.IpAddressUtil; -import org.leocoder.common.utils.ip.IpUtil; -import org.leocoder.common.utils.json.JsonUtil; -import org.leocoder.common.utils.string.StringUtil; -import org.leocoder.domain.pojo.system.SysOperLog; -import org.leocoder.operlog.annotation.OperLog; -import org.leocoder.operlog.service.OperLogAsyncService; +import org.leocoder.thin.common.satoken.CoderLoginUtil; +import org.leocoder.thin.common.utils.date.DateUtil; +import org.leocoder.thin.common.utils.ip.IpAddressUtil; +import org.leocoder.thin.common.utils.ip.IpUtil; +import org.leocoder.thin.common.utils.json.JsonUtil; +import org.leocoder.thin.common.utils.string.StringUtil; +import org.leocoder.thin.domain.pojo.system.SysOperLog; +import org.leocoder.thin.operlog.annotation.OperLog; +import org.leocoder.thin.operlog.service.OperLogAsyncService; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -46,7 +46,7 @@ public class OperLogAspect { * @description [配置切入点] * @author Leocoder */ - @Pointcut("@annotation(org.leocoder.operlog.annotation.OperLog)") + @Pointcut("@annotation(org.leocoder.thin.operlog.annotation.OperLog)") public void operLogPointcut() { } @@ -390,7 +390,8 @@ public class OperLogAspect { if (obj.getClass().isArray()) { Object[] array = (Object[]) obj; StringBuilder sb = new StringBuilder("["); - for (int i = 0; i < array.length && i < 3; i++) { // 最多显示3个元素 + // 最多显示3个元素 + for (int i = 0; i < array.length && i < 3; i++) { if (i > 0) sb.append(", "); sb.append(createObjectString(array[i], excludeFields)); } @@ -408,8 +409,8 @@ public class OperLogAspect { } // 对于Map - if (obj instanceof java.util.Map) { - java.util.Map map = (java.util.Map) obj; + if (obj instanceof Map) { + Map map = (Map) obj; return "[Map, size=" + map.size() + "]"; } @@ -441,8 +442,8 @@ public class OperLogAspect { return DateUtil.format((java.util.Date) obj, "yyyy-MM-dd HH:mm:ss"); } - if (obj instanceof java.time.LocalDateTime) { - java.time.LocalDateTime ldt = (java.time.LocalDateTime) obj; + if (obj instanceof LocalDateTime) { + LocalDateTime ldt = (LocalDateTime) obj; return ldt.toString(); } @@ -511,13 +512,13 @@ public class OperLogAspect { valueStr = value.toString(); } else if (value instanceof java.util.Date) { valueStr = DateUtil.format((java.util.Date) value, "yyyy-MM-dd HH:mm:ss"); - } else if (value instanceof java.time.LocalDateTime || value instanceof java.time.LocalDate) { + } else if (value instanceof LocalDateTime || value instanceof java.time.LocalDate) { valueStr = value.toString(); } else if (value instanceof java.util.Collection) { java.util.Collection collection = (java.util.Collection) value; valueStr = "[Collection, size=" + collection.size() + "]"; - } else if (value instanceof java.util.Map) { - java.util.Map map = (java.util.Map) value; + } else if (value instanceof Map) { + Map map = (Map) value; valueStr = "[Map, size=" + map.size() + "]"; } else { valueStr = value.toString(); diff --git a/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/config/OperLogAsyncConfig.java b/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/config/OperLogAsyncConfig.java index a62f838..051f871 100644 --- a/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/config/OperLogAsyncConfig.java +++ b/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/config/OperLogAsyncConfig.java @@ -1,10 +1,11 @@ -package org.leocoder.operlog.config; +package org.leocoder.thin.operlog.config; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.beans.factory.annotation.Value; + import java.util.concurrent.ThreadPoolExecutor; /** diff --git a/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/service/OperLogAsyncService.java b/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/service/OperLogAsyncService.java index 9db86dd..4a9eb15 100644 --- a/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/service/OperLogAsyncService.java +++ b/coder-common-thin-plugins/coder-common-thin-oper-logs/src/main/java/org/leocoder/thin/operlog/service/OperLogAsyncService.java @@ -1,14 +1,14 @@ -package org.leocoder.operlog.service; +package org.leocoder.thin.operlog.service; -import org.leocoder.domain.pojo.system.SysOperLog; -import org.leocoder.common.exception.coder.YUtil; -import org.leocoder.common.utils.cache.RedisUtil; -import org.leocoder.common.utils.date.DateUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.leocoder.thin.common.exception.coder.YUtil; +import org.leocoder.thin.common.utils.cache.RedisUtil; +import org.leocoder.thin.common.utils.date.DateUtil; +import org.leocoder.thin.domain.pojo.system.SysOperLog; import org.springframework.context.ApplicationContext; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import lombok.extern.slf4j.Slf4j; -import lombok.RequiredArgsConstructor; import java.util.Date; import java.util.List; @@ -139,7 +139,8 @@ public class OperLogAsyncService { // 用户操作统计 String userKey = "oper:stat:user:" + operLog.getOperMan() + ":" + today; redisUtil.add1(userKey); - redisUtil.setCacheObjectHours(userKey, 1, 25); // 25小时过期 + // 25小时过期 + redisUtil.setCacheObjectHours(userKey, 1, 25); // 操作类型统计 String typeKey = "oper:stat:type:" + operLog.getOperType() + ":" + today; diff --git a/coder-common-thin-plugins/pom.xml b/coder-common-thin-plugins/pom.xml index 5d7c049..f0d5fd1 100644 --- a/coder-common-thin-plugins/pom.xml +++ b/coder-common-thin-plugins/pom.xml @@ -21,6 +21,7 @@ coder-common-thin-easyexcel coder-common-thin-repect coder-common-thin-limit + coder-common-thin-oper-logs \ No newline at end of file