diff --git a/aioj-backend-common/src/main/java/cn/meowrain/aioj/backend/framework/annotation/SysLog.java b/aioj-backend-common/src/main/java/cn/meowrain/aioj/backend/framework/annotation/SysLog.java
new file mode 100644
index 0000000..69d8d5b
--- /dev/null
+++ b/aioj-backend-common/src/main/java/cn/meowrain/aioj/backend/framework/annotation/SysLog.java
@@ -0,0 +1,23 @@
+package cn.meowrain.aioj.backend.framework.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 系统日志注解
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface SysLog {
+ /**
+ * 描述
+ * @return {@link String}
+ */
+ String value() default "";
+
+ /**
+ * Spel表达式
+ * @return 日志描述
+ */
+ String expression() default "";
+}
diff --git a/aioj-backend-common/src/main/java/cn/meowrain/aioj/backend/framework/aspect/SysLogAspect.java b/aioj-backend-common/src/main/java/cn/meowrain/aioj/backend/framework/aspect/SysLogAspect.java
new file mode 100644
index 0000000..217b170
--- /dev/null
+++ b/aioj-backend-common/src/main/java/cn/meowrain/aioj/backend/framework/aspect/SysLogAspect.java
@@ -0,0 +1,32 @@
+package cn.meowrain.aioj.backend.framework.aspect;
+
+import cn.hutool.core.util.StrUtil;
+import cn.meowrain.aioj.backend.framework.annotation.SysLog;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+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.springframework.expression.EvaluationContext;
+
+@Aspect
+@Slf4j
+@RequiredArgsConstructor
+public class SysLogAspect {
+
+ @Around("@annotation(sysLog)")
+ public Object around(ProceedingJoinPoint joinPoint,SysLog sysLog) throws Throwable {
+ String strClassName = joinPoint.getTarget().getClass().getName();
+ String strMethodName = joinPoint.getSignature().getName();
+ log.debug("[类名]:{},[方法]:{}", strClassName, strMethodName);
+ String value = sysLog.value();
+ String expression = sysLog.expression();
+ if(StrUtil.isNotBlank(expression)) {
+ // 解析SPEL
+ MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+ EvaluationContext context = SysLogUtils.getContext(point.getArgs(), signature.getMethod());
+ }
+ }
+}
diff --git a/aioj-backend-common/src/main/java/cn/meowrain/aioj/backend/framework/log/utils/SysLogUtils.java b/aioj-backend-common/src/main/java/cn/meowrain/aioj/backend/framework/log/utils/SysLogUtils.java
new file mode 100644
index 0000000..ea0128b
--- /dev/null
+++ b/aioj-backend-common/src/main/java/cn/meowrain/aioj/backend/framework/log/utils/SysLogUtils.java
@@ -0,0 +1,4 @@
+package cn.meowrain.aioj.backend.framework.log.utils;
+
+public class SysLogUtils {
+}
diff --git a/pom.xml b/pom.xml
index 5e5f211..ad03473 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,7 +33,10 @@
2025.0.0.0
-
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
cn.hutool