Browse Source

加入日志, 判断上传文件是否存在

wuweihao 3 years ago
parent
commit
6dee77f7dc

+ 6 - 6
gis_application/src/main/resources/logback-spring.xml

@@ -7,7 +7,7 @@
     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
-            <pattern>${LOG_PATH}/%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <pattern>${LOG_PATH}/%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{TRACE_ID} %-5level %logger{50} - %msg%n</pattern>
             <!--<charset>utf-8</charset>-->
         </encoder>
     </appender>
@@ -26,7 +26,7 @@
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{500} - %msg%n</pattern>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{TRACE_ID} %-5level %logger{500} - %msg%n</pattern>
             <!--<charset>utf-8</charset>-->
         </encoder>
     </appender>
@@ -45,7 +45,7 @@
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符-->
-            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
+            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{TRACE_ID} %-5level %logger{56}.%method:%L - %msg%n</pattern>
             <!--<charset>utf-8</charset>-->
         </encoder>
         <!-- 此日志文件只记录info级别的 -->
@@ -71,7 +71,7 @@
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符-->
-            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
+            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{TRACE_ID} %-5level %logger{56}.%method:%L - %msg%n</pattern>
             <!--<charset>utf-8</charset>-->
         </encoder>
         <!-- 此日志文件只记录error级别的 -->
@@ -97,7 +97,7 @@
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符-->
-            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
+            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{TRACE_ID} %-5level %logger{56}.%method:%L - %msg%n</pattern>
             <!--<charset>utf-8</charset>-->
         </encoder>
         <!-- 此日志文件只记录warn级别的 -->
@@ -123,7 +123,7 @@
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符-->
-            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
+            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{TRACE_ID} %-5level %logger{56}.%method:%L - %msg%n</pattern>
             <!--<charset>utf-8</charset>-->
         </encoder>
         <!-- 此日志文件只记录debug级别的 -->

+ 60 - 1
gis_common/src/main/java/com/gis/common/exception/BaseRuntimeException.java

@@ -1,5 +1,10 @@
 package com.gis.common.exception;
 
+import cn.hutool.core.util.StrUtil;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
 public class BaseRuntimeException extends RuntimeException{
 
     private static final long serialVersionUID = -1518945670203783450L;
@@ -8,15 +13,23 @@ public class BaseRuntimeException extends RuntimeException{
 
     public BaseRuntimeException(String msg){
         super(msg);
+        this.code = -1;
         this.msg = msg;
     }
 
+    /**
+     *
+     * @param code 允许为null
+     * @param msg
+     */
     public BaseRuntimeException(Integer code, String msg){
         super(msg);
-        this.code = code;
+        this.code = code == null? -1 : code;
         this.msg = msg;
     }
 
+
+
     public Integer getCode() {
         return code;
     }
@@ -32,4 +45,50 @@ public class BaseRuntimeException extends RuntimeException{
     public void setMsg(String msg) {
         this.msg = msg;
     }
+
+
+    public static void isNull(Object obj, Integer code, String msg){
+        if (obj == null){
+            getExc(code, msg);
+        }
+    }
+
+    public static void isBlank(Object obj, Integer code, String msg){
+        if (obj == null){
+            getExc(code, msg);
+        }
+
+        if (obj instanceof String && StrUtil.isBlank(obj.toString())){
+            getExc(code, msg);
+        }
+
+    }
+
+
+
+
+
+    /**
+     *
+     * @param obj 存在抛异常
+     * @param code 允许为null
+     * @param msg
+     */
+    public static void isTrue(boolean obj, Integer code, String msg){
+        if (obj){
+            getExc(code, msg);
+        }
+    }
+
+    public static void  getExc(Integer code, String msg){
+        throw new BaseRuntimeException(code, msg);
+    }
+
+
+    public static void isEmpty(List obj, Integer code, String msg){
+        if (CollectionUtils.isEmpty(obj)){
+            getExc(code, msg);
+        }
+    }
+
 }

+ 12 - 1
gis_service/src/main/java/com/gis/service/impl/SceneServiceImpl.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.gis.common.exception.BaseRuntimeException;
 import com.gis.common.proto.util.ConvertUtils;
 import com.gis.common.util.DateUtils;
 import com.gis.common.util.FileUtils;
@@ -68,6 +69,9 @@ public class SceneServiceImpl extends IBaseServiceImpl<SceneEntity, Long> implem
      */
     @Override
     public Result roamViable(RoamViableDto param) throws Exception {
+
+        BaseRuntimeException.isBlank(param, null, "参数不能为空");
+
         String sceneCode = param.getSceneCode();
         SceneEntity entity = entityMapper.findBySceneCode(param.getSceneCode());
         if (entity == null) {
@@ -212,6 +216,9 @@ public class SceneServiceImpl extends IBaseServiceImpl<SceneEntity, Long> implem
      */
     @Override
     public Result editScene(SceneDataDto param) throws QiniuException {
+
+        BaseRuntimeException.isBlank(param, null, "参数不能为空");
+
         String sceneCode = param.getSceneCode();
 
         SceneEntity entity = this.findBySceneCode(sceneCode);
@@ -296,6 +303,8 @@ public class SceneServiceImpl extends IBaseServiceImpl<SceneEntity, Long> implem
             String dateTime = DateUtils.getDateTime();
             FileUtil.writeUtf8String(someDataJson.toJSONString(), entity.getPath() + "/someData_"+ dateTime +".json");
 
+            BaseRuntimeException.isTrue(!FileUtil.isFile(someDataPath), null, "上传七牛云的someData文件不存在");
+
             log.info("someData.json写入完成");
 
             // 将新的someDataJson上传oss
@@ -400,6 +409,8 @@ public class SceneServiceImpl extends IBaseServiceImpl<SceneEntity, Long> implem
 
         log.info("新data2.js写入完成");
 
+        BaseRuntimeException.isTrue(!FileUtil.isFile(data2Path), null, "上传七牛云的data2.js文件不存在");
+
         // 将新的someDataJson上传oss
         QiniuOssUtil.upload(data2Path, OSS_PATH + sceneCode + "/" + data2Name);
         log.info(data2Name+ "已上传到七牛云");
@@ -513,7 +524,7 @@ public class SceneServiceImpl extends IBaseServiceImpl<SceneEntity, Long> implem
         String dateTime = DateUtils.getDateTime();
         FileUtil.writeUtf8String(dataJsJson.toJSONString(), entity.getPath() + "/data_"+ dateTime + ".js");
 
-
+        BaseRuntimeException.isTrue(!FileUtil.isFile(dataPath), null, "上传七牛云的data.js文件不存在");
         //上传oss
         String ossPath = OSS_PATH + sceneCode + "/hot/js/data.js";
         QiniuOssUtil.upload(dataPath, ossPath);

+ 29 - 4
gis_web/src/main/java/com/gis/web/aop/WebLogAspect.java

@@ -10,11 +10,13 @@ import org.aspectj.lang.annotation.AfterReturning;
 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.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -31,6 +33,15 @@ public class WebLogAspect {
     @Autowired
     private HttpServletRequest request;
 
+    private long startTime ;
+
+    // 不打印日志
+    private static List<String> filterUrl;
+    static {
+        filterUrl = new ArrayList<>();
+        filterUrl.add("/manage/scene/edit");
+//        filterUrl.add("/web/common/checkWork");
+    }
 
     @Pointcut("execution(* com.gis.web.controller.*.*(..))")//切入点描述 这个是controller包的切入点
     public void controllerLog(){}//签名,可以理解成这个切入点的一个名称
@@ -38,11 +49,23 @@ public class WebLogAspect {
     @Before("controllerLog()") //在切入点的方法run之前要干的
     public void logBeforeController(JoinPoint joinPoint) throws Exception {
 
+        startTime = System.currentTimeMillis();
+
+        // 设置链路id, 在logback-spring.xml里用
+        MDC.put("TRACE_ID", startTime+"");
+
+        // 记录下请求内容
+        String remoteAddr = request.getRemoteAddr();
+        String requestURI = request.getRequestURI();
+        log.warn("start : {}, {}, uuid: {}" , request.getMethod(), requestURI, startTime);
+
         // 记录请求内容
-        log.warn("start : {}" , request.getRequestURI());
         log.info("request Method : {}" , request.getMethod());
-        log.info("request IP : {}" , request.getRemoteAddr());
-        log.info("request Args : {}" , Arrays.toString(joinPoint.getArgs()));
+        log.info("request IP : {}" , remoteAddr);
+//        log.info("request Args : {}" , Arrays.toString(joinPoint.getArgs()));
+        if (!filterUrl.contains(requestURI)){
+            log.info("request Args : {}" , Arrays.toString(joinPoint.getArgs()));
+        }
 
         // 获取token
         String token = request.getHeader("token");
@@ -78,7 +101,9 @@ public class WebLogAspect {
     public void doAfterReturning(Object ret) throws Throwable {
         // 处理完请求,返回内容
 //        log.info("响应RESPONSE : " + ret.toString());
-        log.warn("end : {}", request.getRequestURI());
+//        log.warn("end : {}", request.getRequestURI());
+        log.warn("end: {}, {}, uuid: {},  响应耗时:{} ms", request.getMethod(), request.getRequestURI(), startTime, (System.currentTimeMillis() - startTime));
+
     }
 
     /**

+ 26 - 7
gis_web/src/main/java/com/gis/web/controller/ExceptionController.java

@@ -2,7 +2,7 @@ package com.gis.web.controller;
 
 import com.gis.common.exception.BaseRuntimeException;
 import com.gis.common.util.Result;
-import lombok.extern.log4j.Log4j2;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.ShiroException;
 import org.apache.shiro.authz.UnauthorizedException;
 import org.springframework.dao.DuplicateKeyException;
@@ -17,12 +17,14 @@ import org.springframework.web.servlet.NoHandlerFoundException;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.ConstraintViolationException;
 import javax.validation.ValidationException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 
 /**
  * 统一捕捉异常,自定义返回参数
  * 这里只可以捕获controller层的异常。
  */
-@Log4j2
+@Slf4j
 @RestControllerAdvice
 public class ExceptionController {
 
@@ -45,15 +47,19 @@ public class ExceptionController {
     @ResponseStatus(HttpStatus.UNAUTHORIZED)
     @ExceptionHandler(UnauthorizedException.class)
     public Result handle401() {
-        log.error("没有授权2");
-        return Result.failure(5001, "没有授权");
+        log.error("没有权限");
+        return Result.failure(5003, "没有权限");
     }
 
     // 捕捉其他所有异常
     @ExceptionHandler(Exception.class)
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     public Result globalException(HttpServletRequest request, Throwable ex) {
-        log.error(ex);
+//        System.out.println("111111111111111111");
+//        log.error(ex.toString());
+        StringWriter trace=new StringWriter();
+        ex.printStackTrace(new PrintWriter(trace));
+        log.error(trace.toString());
         return Result.failure(getStatus(request).value(), ex.getMessage());
     }
 
@@ -71,7 +77,10 @@ public class ExceptionController {
     @ResponseStatus(HttpStatus.OK)
     public Result runtimeExceptionHandler(HttpServletRequest request, BaseRuntimeException e) {
         log.error(request.getRequestURI() + ":" + e.getMsg());
-//        return Result.failure(e.getCode() == null ? Result.CODE_FAILURE : e.getCode(), e.getMsg());
+        // by owen 2022-3-28 显示错误日志详情
+        if (e.getCode() != 0){
+            printErrorMsg(e);
+        }
         return Result.failure(e.getCode(), e.getMsg());
     }
 
@@ -120,10 +129,20 @@ public class ExceptionController {
     @ExceptionHandler(DuplicateKeyException.class)
     public Result handleDuplicateKeyException(DuplicateKeyException e) {
         log.error(e.getMessage(), e);
-        return Result.failure(60005, "数据重复,请检查后提交");
+        return Result.failure(60005, "数据重复,请检查后提交: " + e.getMessage());
     }
 
 
+    /**
+     * by owen 2022-4-1
+     * 打印错误详情
+     * @param e
+     */
+    private void printErrorMsg(BaseRuntimeException e){
+        StringWriter trace=new StringWriter();
+        e.printStackTrace(new PrintWriter(trace));
+        log.error(trace.toString());
+    }
 
 }