浏览代码

增加拦截器日志

baihe 3 年之前
父节点
当前提交
4e9d2c4200

+ 103 - 0
application-facade/src/main/java/com/factory/aspect/LogAspect.java

@@ -0,0 +1,103 @@
+package com.factory.aspect;
+
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+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.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.factory.base.util.JacksonJsonUtils;
+
+import cn.hutool.core.lang.UUID;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 通过切面 记录请求日志
+ *
+ * @author edz
+ */
+@Slf4j
+@Aspect
+@Component
+public class LogAspect {
+
+    @Pointcut("@within(org.springframework.web.bind.annotation.RestController)")
+//    @Pointcut("@target(io.swagger.annotations.ApiOperation)")
+	public void logPointAround() {
+	}
+    
+    @Around("logPointAround()")
+    public Object doAroundLog(ProceedingJoinPoint thisJoinPoint) throws Throwable{
+        Object r = null;
+        String method = thisJoinPoint.getSignature().getName();
+        LocalDateTime startTime = LocalDateTime.now();
+        String uuid = UUID.fastUUID().toString();
+        String url = null;
+        Object userId = null;
+        Map param = null;
+        boolean flag = false;
+        try {
+        	ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+            HttpServletRequest request = requestAttributes.getRequest();
+
+            userId = request.getAttribute("UserId");
+            url = request.getRequestURL().toString();      
+         
+            param = getArgs(thisJoinPoint,((MethodSignature)thisJoinPoint.getSignature()).getParameterNames());
+            log.info("\033[1;32m[访问地址:{}] [方法:{}] [{}] [userId:{}] [参数:{}]\033[0m",url,method,uuid,userId,param);
+            r = thisJoinPoint.proceed ();//被代理对象执行结果
+           
+        } catch (Throwable e) {
+        	flag = true;
+            throw e;//异常信息有统一异常处理器处理
+        }
+        log.info("\033[1;32m[访问地址:{}] [方法:{}] [{}] [执行时间:{}(豪秒)] [{}]\033[0m",url,method,uuid,Duration.between(startTime, LocalDateTime.now()).toMillis(),flag?"异常":"正常");
+        return r;
+    }
+    private static String types = "java.lang.Integer,java.lang.Double,java.lang.Float,java.lang.Long,java.lang.Short,java.lang.Byte,java.lang.Boolean,java.lang.Char,java.lang.String,int,double,long,short,byte,boolean,char,float";
+    
+    private Map getArgs(ProceedingJoinPoint joinPoint,String[] parameterNames) {
+    	Map allArgs = new HashMap();
+    	Object[] args = joinPoint.getArgs();
+    	 for (int k = 0; k < args.length; k++) {
+    	       Object arg = args[k];
+    	       if(arg==null) {
+    	    	   continue;
+    	       }
+    	       if(arg instanceof ServletResponse||arg instanceof ServletRequest) {//
+    	    	continue;   
+    	       }else if(arg instanceof MultipartFile) {//文件
+    	    	   allArgs.put(parameterNames[k],((MultipartFile)arg).getOriginalFilename());
+    	       }else if(arg instanceof MultipartFile[]) {//文件
+    	    	   allArgs.put(parameterNames[k],((MultipartFile[])arg).length);
+    	       }else if(arg instanceof Number||arg instanceof String||arg instanceof Character||arg instanceof Boolean) {//简单类型
+    	    	   allArgs.put(parameterNames[k],arg);
+    	       }else if(arg instanceof Collection) {//集合
+    	    	   allArgs.put(parameterNames[k],arg);
+    	       }else if(arg.getClass().isArray()) {//数组
+    	    	   allArgs.put(parameterNames[k],arg);
+    	       }else {//复杂类型
+    	    	   Map m = JacksonJsonUtils.readObject(JacksonJsonUtils.writeObject(arg), Map.class);
+    	    	   if(m!=null) {
+    	    		   allArgs.putAll(m);
+    	    	   }
+    	       }
+    	 }
+    	return allArgs;
+    }
+}
+

+ 1 - 1
application-facade/src/main/java/com/factory/wx/entity/req/PlanPassReq.java

@@ -31,6 +31,6 @@ public class PlanPassReq {
     @ApiModelProperty(value = "任务Id")
     private Long taskId;
     
-    @ApiModelProperty(value = "任务Id")
+    @ApiModelProperty(value = "角色ID",hidden = true)
     private List<Long> roleIds;
 }

+ 5 - 2
application-facade/src/main/resources/logback-spring.xml

@@ -1,10 +1,13 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
 <configuration scan="true" scanPeriod="3 seconds">
+  <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level]  [%thread] [%logger-%L] - %msg%n"/>
+
     <!--设置日志输出为控制台-->
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
         <encoder>
-            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger-%L] - %msg%n</pattern>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
         </encoder>
     </appender>
 
@@ -18,7 +21,7 @@
         </rollingPolicy>
 
         <layout class="ch.qos.logback.classic.PatternLayout">
-            <Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level]  [%thread] [%logger-%L] - %msg%n</Pattern>
+            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
         </layout>
     </appender>
 

+ 1 - 2
application-facade/src/main/resources/mapper/PlanPassMapper.xml

@@ -17,7 +17,7 @@
         WHERE bp.plan_type=2 and bp.status in (4,5)
         AND ot.onsite_calendar_id = oc.id
         AND oc.benteler_plan_id = bp.id
-        AND  rat.onsite_task_id = ot.id
+        AND rat.onsite_task_id = ot.id
         AND rat.`status` = 0
         AND ot.`status` = 1
         AND rat.approval_role in
@@ -47,7 +47,6 @@
         AND oc.benteler_plan_id = bp.id
         AND rat.`status` = 0
         AND ot.`status` = 1
-        AND rat.onsite_task_id = ot.id
         AND rat.`status` = 0
         AND rat.approval_role in
         <foreach collection="req.roleIds" item="roleId" open="(" close=")" separator=",">

+ 1 - 1
application-task/src/main/java/com/factory/websocket/WebSocketConfig.java

@@ -5,6 +5,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.TaskScheduler;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.socket.config.annotation.EnableWebSocket;
 import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
@@ -12,7 +13,6 @@ import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry
 
 @Configuration
 @EnableWebSocket
-@RestController
 public class WebSocketConfig implements WebSocketConfigurer {
 
     @Autowired

+ 5 - 2
application-task/src/main/resources/logback-spring.xml

@@ -1,10 +1,13 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
 <configuration scan="true" scanPeriod="3 seconds">
+  <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level]  [%thread] [%logger-%L] - %msg%n"/>
+
     <!--设置日志输出为控制台-->
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
         <encoder>
-            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger-%L] - %msg%n</pattern>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
         </encoder>
     </appender>
 
@@ -18,7 +21,7 @@
         </rollingPolicy>
 
         <layout class="ch.qos.logback.classic.PatternLayout">
-            <Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level]  [%thread] [%logger-%L] - %msg%n</Pattern>
+            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
         </layout>
     </appender>