lfx 10 månader sedan
förälder
incheckning
83098db3f6

+ 4 - 0
mjava-mc/pom.xml

@@ -21,6 +21,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>

+ 92 - 0
mjava-mc/src/main/java/com/malk/mc/aspect/RequestLoggingAspect.java

@@ -0,0 +1,92 @@
+package com.malk.mc.aspect;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.mc.entity.McRequestRecord;
+import com.malk.mc.mapper.McRequestRecordMapper;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
+import org.springframework.core.ParameterNameDiscoverer;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
+import java.lang.reflect.Method;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+
+@Aspect
+@Component
+public class RequestLoggingAspect {
+
+    @Autowired
+    private McRequestRecordMapper mcRequestRecordMapper;
+
+    private ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
+
+    @Around("execution(* com.malk.mc.controller..*(..))")
+    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
+        long startTime = System.currentTimeMillis();
+
+        // 捕获请求参数
+//        Map<String, String[]> parameterMap = request.getParameterMap();
+        // 获取请求参数
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+        Map<String, Object> parameterMap = getParameters(joinPoint, method);
+        String parameters=JSONObject.toJSONString(parameterMap);
+//        String parameters = parameterMap.entrySet().stream()
+//                .map(e -> e.getKey() + "=" + String.join(",", e.getValue()))
+//                .reduce((a, b) -> a + ", " + b).orElse("");
+
+        Object result = joinPoint.proceed();
+
+        long endTime = System.currentTimeMillis();
+        long duration = endTime - startTime;
+
+        // 创建请求记录对象
+        McRequestRecord requestRecord = new McRequestRecord();
+        requestRecord.setRequestUri(request.getRequestURI());
+        requestRecord.setRequestMethod(request.getMethod());
+        requestRecord.setRequestBody(parameters);
+        requestRecord.setResponseBody(JSONObject.toJSONString(result));
+        requestRecord.setTimestamp(LocalDateTime.now());
+        requestRecord.setDuration(duration);
+        requestRecord.setPid(request.getHeader("pid"));
+
+        // 保存请求记录
+        mcRequestRecordMapper.insert(requestRecord);
+
+        return result;
+    }
+
+    private Map<String, Object> getParameters(JoinPoint joinPoint, Method method) {
+        Object[] args = joinPoint.getArgs();
+        Map<String, Object> params = new HashMap<>();
+
+        // 获取方法参数名称
+        String[] paramNames = parameterNameDiscoverer.getParameterNames(method);
+
+        for (int i = 0; i < paramNames.length; i++) {
+            if (method.isAnnotationPresent(RequestBody.class)) {
+                // 如果方法上有 @RequestBody 注解,则获取请求体参数
+                if (i == 0) { // 假设只有一个 @RequestBody 参数
+                    params.put(paramNames[i], args[i]);
+                }
+            } else {
+                // 如果方法上没有 @RequestBody 注解,则获取普通参数
+                params.put(paramNames[i], args[i]);
+            }
+        }
+        return params;
+    }
+}

+ 37 - 0
mjava-mc/src/main/java/com/malk/mc/controller/McProjectController.java

@@ -1,19 +1,30 @@
 package com.malk.mc.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.malk.core.McProject;
+import com.malk.mc.entity.McRequestRecord;
+import com.malk.mc.mapper.McRequestRecordMapper;
 import com.malk.mc.service.McProjectService;
 import com.malk.server.common.McR;
 import com.malk.utils.PublicUtil;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDateTime;
+import java.util.List;
+
 @RestController
 @RequestMapping("/project/")
 public class McProjectController {
 
     @Autowired
     private McProjectService mcProjectService;
+    @Autowired
+    private McRequestRecordMapper mcRequestRecordMapper;
 
     @PostMapping("add")
     public McR add(@RequestBody JSONObject param){
@@ -41,5 +52,31 @@ public class McProjectController {
         return McR.success(McProject.getYida());
     }
 
+    @GetMapping("logs")
+    public McR getLog(@RequestParam(required = false, defaultValue = "0") int currentPage,
+                      @RequestParam(required = false, defaultValue = "0") int pageSize,
+                      @RequestParam(required = false) String pid,
+                      @RequestParam(required = false) String uri,
+                      @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startDate,
+                      @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endDate){
+        Page<McRequestRecord> page = new Page<>(currentPage, pageSize);
+        QueryWrapper<McRequestRecord> queryWrapper = new QueryWrapper<>();
+        if(!PublicUtil.isNull(pid)){
+            queryWrapper.eq("pid", pid);
+        }
+        if(!PublicUtil.isNull(uri)){
+            queryWrapper.like("request_uri", uri);
+        }
+        if (startDate != null && endDate != null) {
+            queryWrapper.between("timestamp", startDate, endDate);
+        }
+        mcRequestRecordMapper.selectPage(page,queryWrapper);
+        return McR.success(page);
+    }
+
+    @PostMapping("test")
+    public McR test(@RequestBody JSONObject param){
+        return McR.success(LocalDateTime.now()+JSONObject.toJSONString(param));
+    }
 
 }

+ 24 - 0
mjava-mc/src/main/java/com/malk/mc/entity/McRequestRecord.java

@@ -0,0 +1,24 @@
+package com.malk.mc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("t_mc_req_record")
+public class McRequestRecord {
+
+    @TableId(type= IdType.AUTO)
+    private Long id;
+    private String requestUri;
+    private String requestMethod;
+    private String requestBody;
+    private String responseBody;
+    private Long duration;
+    private String pid;
+    private LocalDateTime timestamp;
+
+}

+ 9 - 0
mjava-mc/src/main/java/com/malk/mc/mapper/McRequestRecordMapper.java

@@ -0,0 +1,9 @@
+package com.malk.mc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.malk.mc.entity.McRequestRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface McRequestRecordMapper extends BaseMapper<McRequestRecord> {
+}

+ 1 - 1
mjava-mc/src/main/resources/logback-spring.xml

@@ -52,7 +52,7 @@
 
     <!-- 日志输出级别 -->
     <logger name="org.springframework" level="debug"  additivity="false"/>
-    <logger name="com.malk.connecter" level="debug"/>
+    <logger name="com.zitoo.connecter" level="debug"/>
     <root level="INFO">
         <appender-ref ref="stdout"/>
         <appender-ref ref="appLogAppender"/>