From 220f93fae54e62daf55b5bd2c19b9cd2f734cff0 Mon Sep 17 00:00:00 2001 From: fengyarnom Date: Thu, 31 Oct 2024 14:44:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=A7=E8=A1=8C=E5=99=A8?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B,=20=E4=BD=BF=E7=94=A8=E5=8D=95=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E5=8E=BB=E8=AF=BB=E5=86=99=E6=96=87=E4=BB=B6=EF=BC=8C?= =?UTF-8?q?=E4=BB=A5=E9=98=B2=E6=AD=A2=E6=97=A5=E5=BF=97=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=B7=B7=E4=B9=B1=20-=20=E4=BD=BF=E7=94=A8=E5=8D=95=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=20-=20=E5=86=99=E5=85=A5=E6=9B=B4=E5=A4=9A=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=96=B9=E4=BE=BF=E6=9F=A5?= =?UTF-8?q?=E6=89=BE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sideslope/bd/WarningLogExecutor.java | 56 ++++++++++++++----- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/WarningLogExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/WarningLogExecutor.java index 61f3d491..59ab4fa7 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/WarningLogExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/WarningLogExecutor.java @@ -1,42 +1,50 @@ package com.imdroid.sideslope.bd; import com.imdroid.common.util.ThreadManager; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import java.io.*; import java.nio.file.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Arrays; import java.util.List; -import java.util.concurrent.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @Component public class WarningLogExecutor { - // 警告日志生成 @Value("${log.directory}") private String logDirectory; private final ExecutorService executor; + // 记录已初始化的文件 + private final ConcurrentHashMap initializedFiles = new ConcurrentHashMap<>(); public WarningLogExecutor() { - this.executor = ThreadManager.getFixedThreadPool(); + this.executor = ThreadManager.getSingleThreadPool("warning_log_thread"); } - public void generateWarningLogs(String keyword) { + public void generateWarningLogs(String keyword, String warningTypeName) { try { + String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")); + String warningFileName = "Warning-" + keyword + "-" + date + ".log"; + Path warningFile = Paths.get(logDirectory, warningFileName); + + // 如果是新文件,先写入初始化信息 + if (initializedFiles.putIfAbsent(warningFileName, true) == null) { + initializeWarningFile(warningFile, keyword, warningTypeName); + } + + // 找到日志文件 List logFiles = Files.list(Paths.get(logDirectory)) .filter(Files::isRegularFile) .filter(path -> path.getFileName().toString().matches("sideslopertcm(\\.\\d{4}-\\d{2}-\\d{2}\\.\\d+)?\\.log")) .collect(Collectors.toList()); for (Path logFile : logFiles) { - executor.submit(() -> processFile(logFile, keyword)); + executor.submit(() -> processFile(logFile, keyword, warningTypeName, warningFile)); } } catch (IOException e) { e.printStackTrace(); @@ -45,17 +53,35 @@ public class WarningLogExecutor { } } - private void processFile(Path logFile, String keyword) { - String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); - String warningFileName = "Warning-" + keyword + "-" + date + ".log"; - Path warningFile = Paths.get(logDirectory, warningFileName); + private void initializeWarningFile(Path warningFile, String keyword, String warningTypeName) { + try (BufferedWriter writer = Files.newBufferedWriter(warningFile, + StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { + writer.write("=== Warning Log File ==="); + writer.newLine(); + writer.write("Created Time: " + LocalDateTime.now()); + writer.newLine(); + writer.write("Warning Type Name: " + warningTypeName); + writer.newLine(); + writer.write("Keyword: " + keyword); + writer.newLine(); + writer.write("=============================="); + writer.newLine(); + writer.newLine(); + } catch (IOException e) { + e.printStackTrace(); + } + } + private void processFile(Path logFile, String keyword, String warningTypeName, Path warningFile) { try (BufferedReader reader = Files.newBufferedReader(logFile); - BufferedWriter writer = Files.newBufferedWriter(warningFile, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { + BufferedWriter writer = Files.newBufferedWriter(warningFile, + StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { + + writer.write("Processing source file: " + logFile.getFileName()); + writer.newLine(); String line; while ((line = reader.readLine()) != null) { - // 行如果包含了特定的关键词,比如站点的编号,则记录这一行 if (line.contains(keyword)) { writer.write(line); writer.newLine();