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