diff --git a/src/main/java/com/biutag/supervision/aop/SystemLogAspect.java b/src/main/java/com/biutag/supervision/aop/SystemLogAspect.java
new file mode 100644
index 0000000..8c83455
--- /dev/null
+++ b/src/main/java/com/biutag/supervision/aop/SystemLogAspect.java
@@ -0,0 +1,446 @@
+package com.biutag.supervision.aop;
+
+import com.biutag.supervision.common.UserContextHolder;
+import com.biutag.supervision.constants.RedisKeyConstants;
+import com.biutag.supervision.pojo.Result;
+import com.biutag.supervision.pojo.domain.AppUser;
+import com.biutag.supervision.pojo.entity.SystemLog;
+import com.biutag.supervision.pojo.model.UserAuth;
+import com.biutag.supervision.pojo.vo.TokenVo;
+import com.biutag.supervision.service.SystemLogService;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+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.core.annotation.Order;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.lang.reflect.Array;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * 统一记录进入 Controller 调用链的接口访问日志。
+ *
+ * 日志切面优先级高于现有参数检查切面,因此参数检查抛出的业务异常也可以被记录;
+ * 在 Spring MVC 调用 Controller 之前就被鉴权拦截的请求不会进入本切面。
+ */
+@Slf4j
+@Aspect
+@Component
+@Order(-100)
+@RequiredArgsConstructor
+public class SystemLogAspect {
+
+ private static final int SUCCESS = 1;
+ private static final int FAILURE = 0;
+ private static final int MAX_PARAMS_LENGTH = 4000;
+ private static final int MAX_ERROR_LENGTH = 1000;
+ private static final String MASK_VALUE = "******";
+ private static final String TRUNCATED_MARK = "...[内容已截断]";
+
+ private final SystemLogService systemLogService;
+ private final ObjectMapper objectMapper;
+ private final RedisTemplate