Bladeren bron

投诉权限管理日志和启动文件优化

weijianghai 2 jaren geleden
bovenliggende
commit
c3ca9ed0b1

+ 2 - 0
.gitignore

@@ -165,3 +165,5 @@ local.properties
 *.iml
 *.iml
 out
 out
 gen
 gen
+
+*.log

+ 1 - 1
doc/部署文档/正式环境/bin/run.sh

@@ -1,3 +1,3 @@
 #!/bin/bash
 #!/bin/bash
 
 
-nohup java -jar /data1/acl/aclTousu.jar > /data1/acl/output.out 2>&1 &
+nohup java -jar /data1/acl/aclTousu.jar >/dev/null 2>&1 &

+ 3 - 4
doc/部署文档/正式环境/bin/stop.sh

@@ -1,6 +1,5 @@
 #!/bin/bash
 #!/bin/bash
-for i in $(ps -ef|grep aclTousu.jar |grep -v grep|awk '{print $2}')
-do 
-kill -9 $i;
-done
 
 
+for i in $(ps -ef | grep aclTousu.jar | grep -v grep | awk '{print $2}'); do
+  kill -9 "$i"
+done

+ 1 - 1
doc/部署文档/测试环境/bin/run.sh

@@ -1,3 +1,3 @@
 #!/bin/bash
 #!/bin/bash
 
 
-nohup java -jar /data1/acl/aclTousu.jar > /data1/acl/output.out 2>&1 &
+nohup java -jar /data1/acl/aclTousu.jar >/dev/null 2>&1 &

+ 3 - 3
doc/部署文档/测试环境/bin/stop.sh

@@ -1,5 +1,5 @@
 #!/bin/bash
 #!/bin/bash
-for i in $(ps -ef|grep aclTousu.jar |grep -v grep|awk '{print $2}')
-do 
-kill -9 $i;
+
+for i in $(ps -ef | grep aclTousu.jar | grep -v grep | awk '{print $2}'); do
+  kill -9 "$i"
 done
 done

BIN
doc/需求文档/需求方给出的文档资料/流程在线协作对接用户系统Rest接口文档.docx


+ 8 - 0
pom.xml

@@ -18,6 +18,14 @@
     </properties>
     </properties>
 
 
     <dependencies>
     <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
         <dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
             <artifactId>spring-boot-starter-data-redis</artifactId>

+ 70 - 0
src/main/java/com/nokia/config/ControllerExceptionHandler.java

@@ -0,0 +1,70 @@
+package com.nokia.config;
+
+import com.nokia.common.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.validation.BindException;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import javax.validation.ConstraintViolationException;
+
+/**
+ * 请求异常处理
+ */
+@Slf4j
+@RestControllerAdvice
+public class ControllerExceptionHandler
+{
+    @ExceptionHandler(HttpMessageNotReadableException.class)
+    public ResponseEntity<Object> httpMessageNotReadableExceptionValidatorHandler(HttpMessageNotReadableException e)
+    {
+        log.warn("╭( ′• o •′ )╭☞ 请求参数校验未通过: {}", e.getMessage());
+        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(R.error().message(e.getMessage()));
+    }
+
+    @ExceptionHandler(BindException.class)
+    public ResponseEntity<Object> bindExceptionValidatorHandler(BindException e)
+    {
+        FieldError fieldError = e.getBindingResult().getFieldError();
+        String message = "";
+        if (fieldError != null)
+        {
+            message = fieldError.getDefaultMessage();
+            log.warn("╭( ′• o •′ )╭☞ 请求参数校验未通过: {}", message);
+        }
+        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(R.error().message(message));
+    }
+
+    @ExceptionHandler(ConstraintViolationException.class)
+    public ResponseEntity<Object> constraintViolationExceptionValidatorHandler(ConstraintViolationException e)
+    {
+        String message = e.getConstraintViolations().iterator().next().getMessage();
+        log.warn("╭( ′• o •′ )╭☞ 请求参数校验未通过: {}", message);
+        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(R.error().message(message));
+    }
+
+    @ExceptionHandler(MethodArgumentNotValidException.class)
+    public ResponseEntity<Object> methodArgumentNotValidExceptionValidatorHandler(MethodArgumentNotValidException e)
+    {
+        FieldError fieldError = e.getBindingResult().getFieldError();
+        String message = "";
+        if (fieldError != null)
+        {
+            message = fieldError.getDefaultMessage();
+            log.warn("╭( ′• o •′ )╭☞ 请求参数校验未通过: {}", message);
+        }
+        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(R.error().message(message));
+    }
+    
+    @ExceptionHandler({Exception.class})
+    public ResponseEntity<Object> exceptionHandler(Exception e)
+    {
+        log.error("╭( ′• o •′ )╭☞ 发生错误了 {}", e.getMessage(), e);
+        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(R.error());
+    }
+}

+ 107 - 0
src/main/java/com/nokia/config/LogAspectConfig.java

@@ -0,0 +1,107 @@
+package com.nokia.config;
+
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+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.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StopWatch;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * 日志配置
+ *
+ */
+@Aspect
+@Component
+@Slf4j
+public class LogAspectConfig
+{
+    @Pointcut("execution(* com.nokia..ControllerExceptionHandler.*ValidatorHandler(..))")
+    public void validatorExceptionHandlerPointcut()
+    {
+        // Pointcut
+    }
+
+    @Pointcut("execution(public * com.nokia..*Controller.*(..))")
+    public void controllerPointcut()
+    {
+        // Pointcut
+    }
+
+    @Pointcut("execution(* com.nokia..ControllerExceptionHandler.*(..))")
+    public void controllerExceptionHandlerPointcut()
+    {
+        // Pointcut
+    }
+
+    @Pointcut("controllerPointcut() || validatorExceptionHandlerPointcut()")
+    public void beforePointCut()
+    {
+        // Pointcut
+    }
+
+    @Pointcut("controllerPointcut() || controllerExceptionHandlerPointcut()")
+    public void afterPointCut()
+    {
+        // Pointcut
+    }
+
+    @Before("beforePointCut()")
+    public void doBefore(JoinPoint joinPoint)
+    {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if (attributes == null)
+        {
+            return;
+        }
+        HttpServletRequest request = attributes.getRequest();
+        // 打印请求信息
+        log.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
+        // 打印请求参数
+        Object[] args = joinPoint.getArgs();
+        List<Object> list = new ArrayList<>();
+        for (Object arg : args) {
+            if (arg instanceof ServletRequest
+                    || arg instanceof ServletResponse
+                    || arg instanceof MultipartFile
+                    || arg instanceof Exception
+            ) {
+                continue;
+            }
+            list.add(arg);
+        }
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+        log.info("请求参数: {}", JSON.toJSONString(list));
+    }
+
+    @Around("afterPointCut()")
+    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable
+    {
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start();
+        MDC.put("traceId", UUID.randomUUID().toString().replace("-", ""));
+        Object result = proceedingJoinPoint.proceed();
+        stopWatch.stop();
+        log.info("返回: {}", JSON.toJSONString(result));
+        log.info("耗时:{} ms", stopWatch.getTotalTimeMillis());
+        return result;
+    }
+}

+ 0 - 13
src/main/java/com/nokia/controller/FlowApiController.java

@@ -38,9 +38,7 @@ public class FlowApiController {
      */
      */
     @PostMapping("flow/api/userTree")
     @PostMapping("flow/api/userTree")
     public R getUserTree(@RequestBody UserTreeReq userTreeReq) {
     public R getUserTree(@RequestBody UserTreeReq userTreeReq) {
-        log.debug("接收到入参...{}", userTreeReq);
         List<Map<String, Object>> userTree = flowService.getUserTree(userTreeReq);
         List<Map<String, Object>> userTree = flowService.getUserTree(userTreeReq);
-        log.debug("返回结果...{}", userTree);
         return R.ok().data(userTree);
         return R.ok().data(userTree);
     }
     }
 
 
@@ -49,12 +47,10 @@ public class FlowApiController {
      */
      */
     @PostMapping("flow/api/getPhoneListByRole")
     @PostMapping("flow/api/getPhoneListByRole")
     public R getPhoneListByRole(@RequestBody JSONObject req) {
     public R getPhoneListByRole(@RequestBody JSONObject req) {
-        log.debug("接收到入参...{}", req);
         try {
         try {
             int roleId = req.getIntValue("roleId");
             int roleId = req.getIntValue("roleId");
             int cityId = req.getIntValue("cityId");
             int cityId = req.getIntValue("cityId");
             List<String> phoneList = flowService.getPhoneListByRole(roleId, cityId);
             List<String> phoneList = flowService.getPhoneListByRole(roleId, cityId);
-            log.debug("返回结果...{}", phoneList);
             return R.ok().data(phoneList);
             return R.ok().data(phoneList);
         } catch (NumberFormatException e) {
         } catch (NumberFormatException e) {
             e.printStackTrace();
             e.printStackTrace();
@@ -65,7 +61,6 @@ public class FlowApiController {
     @PostMapping("flow/api")
     @PostMapping("flow/api")
     @ResponseBody
     @ResponseBody
     public R flowApi(@RequestBody JSONObject jsonObject) {
     public R flowApi(@RequestBody JSONObject jsonObject) {
-        log.debug("接收到入参...{}", jsonObject);
         String callType = jsonObject.getString("callType");
         String callType = jsonObject.getString("callType");
         if (callType == null) {
         if (callType == null) {
             return R.error().message("输入必须包含callType");
             return R.error().message("输入必须包含callType");
@@ -109,7 +104,6 @@ public class FlowApiController {
                 flowRoleCityVos.add(new FlowRoleCityVo(role));
                 flowRoleCityVos.add(new FlowRoleCityVo(role));
             }
             }
         }
         }
-        log.debug("返回结果...{}", flowRoleCityVos);
         return R.ok().data(flowRoleCityVos);
         return R.ok().data(flowRoleCityVos);
     }
     }
 
 
@@ -119,13 +113,11 @@ public class FlowApiController {
             return R.ok().data(flowService.findRoleList());
             return R.ok().data(flowService.findRoleList());
         }
         }
         List<FlowRoleVo> roleList = flowService.findRoleList(username);
         List<FlowRoleVo> roleList = flowService.findRoleList(username);
-        log.debug("返回结果...{}", roleList);
         return R.ok().data(roleList);
         return R.ok().data(roleList);
     }
     }
 
 
     public R findToPage() {
     public R findToPage() {
         List<FlowUserVo> flowUserVos = flowService.findToPage();
         List<FlowUserVo> flowUserVos = flowService.findToPage();
-        log.debug("返回结果...{}", flowUserVos);
         return R.ok().data(flowUserVos);
         return R.ok().data(flowUserVos);
     }
     }
 
 
@@ -135,7 +127,6 @@ public class FlowApiController {
             return R.error().message("输入必须包含loginId");
             return R.error().message("输入必须包含loginId");
         }
         }
         FlowUserVo flowUserVo = flowService.getByLoginId(loginId);
         FlowUserVo flowUserVo = flowService.getByLoginId(loginId);
-        log.debug("返回结果...{}", flowUserVo);
         return R.ok().data(flowUserVo);
         return R.ok().data(flowUserVo);
     }
     }
 
 
@@ -150,7 +141,6 @@ public class FlowApiController {
             return R.error().message("输入必须包含userId");
             return R.error().message("输入必须包含userId");
         }
         }
         FlowUserVo flowUserVo = flowService.getByUserId(userId);
         FlowUserVo flowUserVo = flowService.getByUserId(userId);
-        log.debug("返回结果...{}", flowUserVo);
         return R.ok().data(flowUserVo);
         return R.ok().data(flowUserVo);
     }
     }
 
 
@@ -165,7 +155,6 @@ public class FlowApiController {
             return R.error().message("输入必须包含userId");
             return R.error().message("输入必须包含userId");
         }
         }
         List<Integer> roleIdList = flowService.findRoleIdByUserId(userId);
         List<Integer> roleIdList = flowService.findRoleIdByUserId(userId);
-        log.debug("返回结果...{}", roleIdList);
         return R.ok().data(roleIdList);
         return R.ok().data(roleIdList);
     }
     }
 
 
@@ -180,7 +169,6 @@ public class FlowApiController {
             return R.error().message("输入必须包含roleId");
             return R.error().message("输入必须包含roleId");
         }
         }
         List<Integer> userIdList = flowService.findUserIdByRoleId(roleId);
         List<Integer> userIdList = flowService.findUserIdByRoleId(roleId);
-        log.debug("返回结果...{}", userIdList);
         return R.ok().data(userIdList);
         return R.ok().data(userIdList);
     }
     }
 
 
@@ -195,7 +183,6 @@ public class FlowApiController {
         String userName = jsonObject.getString("userName");
         String userName = jsonObject.getString("userName");
         userName = userName == null || userName.equals("") ? null : userName.trim();
         userName = userName == null || userName.equals("") ? null : userName.trim();
         List<FlowUserVo> flowUserVos = flowService.findAuthorizedUser(loginId, roleId, userName);
         List<FlowUserVo> flowUserVos = flowService.findAuthorizedUser(loginId, roleId, userName);
-        log.debug("返回结果...{}", flowUserVos);
         return R.ok().data(flowUserVos);
         return R.ok().data(flowUserVos);
     }
     }
 
 

+ 0 - 1
src/main/java/com/nokia/controller/VerificationController.java

@@ -40,7 +40,6 @@ public class VerificationController {
 
 
     @PostMapping("/verification")
     @PostMapping("/verification")
     public R verifySystem(@RequestBody TokenVo tokenEntity) {
     public R verifySystem(@RequestBody TokenVo tokenEntity) {
-        log.debug("输入参数: {}", tokenEntity);
         User userEntity = aclService.verifySystem(tokenEntity.getToken(), tokenEntity.getFromSystem());
         User userEntity = aclService.verifySystem(tokenEntity.getToken(), tokenEntity.getFromSystem());
         log.debug("输出用户信息: {}", userEntity);
         log.debug("输出用户信息: {}", userEntity);
         Map<String, String> map = new HashMap<>();
         Map<String, String> map = new HashMap<>();

+ 1 - 1
src/main/resources/application-product.properties

@@ -3,7 +3,7 @@ server.port=12128
 
 
 # log配置
 # log配置
 logging.level.root=info
 logging.level.root=info
-logging.level.com.nokia=debug
+#logging.level.com.nokia=debug
 
 
 # 正式环境数据源GP数据库配置
 # 正式环境数据源GP数据库配置
 spring.datasource.driver-class-name=org.postgresql.Driver
 spring.datasource.driver-class-name=org.postgresql.Driver

+ 1 - 2
src/main/resources/application.properties

@@ -1,6 +1,5 @@
 # 启用的配置
 # 启用的配置
-spring.profiles.active=test
-
+spring.profiles.active=product
 top.url=http://10.17.180.3/prod-api/verifySystem
 top.url=http://10.17.180.3/prod-api/verifySystem
 dop.url=http://10.17.180.5:8089/prod-api/verifySystem
 dop.url=http://10.17.180.5:8089/prod-api/verifySystem
 top.api.fromSystem=dh
 top.api.fromSystem=dh

+ 54 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <property name="PATH" value="./log"/>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <Pattern>%d{HH:mm:ss.SSS} %highlight(%-5level) %yellow(%X{traceId}) %magenta([%thread]) %cyan(%logger:%line) %msg%n</Pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+    <appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${PATH}/trace.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!-- rollover daily -->
+            <fileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
+            <maxFileSize>10MB</maxFileSize>
+            <maxHistory>60</maxHistory>
+            <totalSizeCap>20GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <Pattern>%d %highlight(%-5level) %yellow(%X{traceId}) %magenta([%thread]) %cyan(%logger:%line) %msg%n</Pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${PATH}/error.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!-- rollover daily -->
+            <fileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
+            <maxFileSize>10MB</maxFileSize>
+            <maxHistory>60</maxHistory>
+            <totalSizeCap>20GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <Pattern>%d %highlight(%-5level) %yellow(%X{traceId}) %magenta([%thread]) %cyan(%logger:%line) %msg%n</Pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+    </root>
+    <root level="TRACE">
+        <appender-ref ref="TRACE_FILE"/>
+    </root>
+    <root level="ERROR">
+        <appender-ref ref="ERROR_FILE"/>
+    </root>
+</configuration>