Przeglądaj źródła

持久化日志解析异常

Miaomz 4 lat temu
rodzic
commit
29cd20d26c

+ 10 - 2
src/main/java/com/seecoder/dataanalysis/config/LogTrackingConfig.java

@@ -1,7 +1,9 @@
 package com.seecoder.dataanalysis.config;
 
 import com.nju.edu.logTracking.LogConsumer;
+import com.seecoder.dataanalysis.data.dao.util.ParsingExceptionInfoDao;
 import com.seecoder.dataanalysis.logic.parser.LogParsingService;
+import com.seecoder.dataanalysis.logic.parser.ParsingException;
 import com.seecoder.dataanalysis.util.LoggerUtil;
 import com.seecoder.dataanalysis.vo.SimpleLog;
 import org.slf4j.Logger;
@@ -17,8 +19,11 @@ public class LogTrackingConfig {
     @Autowired
     LogParsingService logParsingService;
 
+    @Autowired
+    ParsingExceptionInfoDao parsingExceptionInfoDao;
+
     @Bean
-    public void LogTrackingConfigurer() {
+    public void LogTrackingConfigurator() {
         //需新建LogConsumer类型的对象,实现run方法
         //run方法参数value为接收到的json格式的log,每次接收到log都会执行run方法
         LogConsumer myConsumer = new LogConsumer() {
@@ -28,7 +33,10 @@ public class LogTrackingConfig {
                     LoggerUtil.info(logger, "get log: " + value); //此为示例,意思是每次接收到log都将其打印到终端
                     SimpleLog sl = logParsingService.parseLog(value);
                     logParsingService.parseLogData(sl, true);
-                }catch (Exception e) {
+                } catch (ParsingException e) {
+                    e.printStackTrace();
+                    parsingExceptionInfoDao.save(e.convertToEntity());
+                } catch (Exception e) {
                     e.printStackTrace();
                 }
             }

+ 13 - 0
src/main/java/com/seecoder/dataanalysis/data/dao/util/ParsingExceptionInfoDao.java

@@ -0,0 +1,13 @@
+package com.seecoder.dataanalysis.data.dao.util;
+
+import com.seecoder.dataanalysis.data.entity.util.ParsingExceptionInfo;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author miaomuzhi
+ * @since 2022/2/27
+ */
+@Repository
+public interface ParsingExceptionInfoDao extends MongoRepository<ParsingExceptionInfo, Integer> {
+}

+ 33 - 0
src/main/java/com/seecoder/dataanalysis/data/entity/util/ParsingExceptionInfo.java

@@ -0,0 +1,33 @@
+package com.seecoder.dataanalysis.data.entity.util;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
+
+/**
+ * @author miaomuzhi
+ * @since 2022/2/27
+ */
+@Document(collection = "parsing_exceptions_info")
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+@Data
+public class ParsingExceptionInfo {
+    @Id
+    @Field("parsing_id")
+    private Integer parsingId;
+
+    @Field("error_code")
+    private Integer errorCode;
+
+    @Field("parsing_data")
+    private String parsingData;
+
+    @Field("message")
+    private String message;
+}

+ 13 - 3
src/main/java/com/seecoder/dataanalysis/logic/parser/ParsingException.java

@@ -1,5 +1,7 @@
 package com.seecoder.dataanalysis.logic.parser;
 
+import com.seecoder.dataanalysis.data.entity.util.ParsingExceptionInfo;
+
 /**
  * @author miaomuzhi
  * @since 2022/2/15
@@ -14,16 +16,24 @@ public class ParsingException extends Exception{
      * 4: opType和数据内容不匹配
      */
     private int errorCode;
-    private String rawJson;
+
+    /**
+     * 待解析数据,可能是json或者对象
+     */
+    private String parsingData;
 
     public ParsingException(String message, int errorCode) {
         super(message);
         this.errorCode = errorCode;
     }
 
-    public ParsingException(String message, int errorCode, String rawJson) {
+    public ParsingException(String message, int errorCode, String parsingData) {
         super(message);
         this.errorCode = errorCode;
-        this.rawJson = rawJson;
+        this.parsingData = parsingData;
+    }
+
+    public ParsingExceptionInfo convertToEntity() {
+        return new ParsingExceptionInfo(0, this.errorCode, this.parsingData, this.getMessage());
     }
 }