From 58dc0727a11481c127fc6111b73fa309b03505b5 Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期四, 11 十二月 2025 18:54:36 +0800
Subject: [PATCH] #AI

---
 src/main/java/com/zy/ai/log/AiLogAppender.java |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/ai/log/AiLogAppender.java b/src/main/java/com/zy/ai/log/AiLogAppender.java
new file mode 100644
index 0000000..9a25289
--- /dev/null
+++ b/src/main/java/com/zy/ai/log/AiLogAppender.java
@@ -0,0 +1,53 @@
+package com.zy.ai.log;
+
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.AppenderBase;
+
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.stream.Collectors;
+
+public class AiLogAppender extends AppenderBase<ILoggingEvent> {
+
+    // 淇濆瓨鏈�杩� 2000 鏉℃棩蹇�
+    private static final LinkedBlockingDeque<String> LOG_BUFFER = new LinkedBlockingDeque<>(2000);
+
+    private static final DateTimeFormatter TIME_FORMATTER =
+            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")
+                    .withZone(ZoneId.systemDefault());
+
+    @Override
+    protected void append(ILoggingEvent event) {
+        String time = TIME_FORMATTER.format(Instant.ofEpochMilli(event.getTimeStamp()));
+        String thread = event.getThreadName();
+        String level = event.getLevel().toString();
+        String loggerName = event.getLoggerName();
+        String message = event.getFormattedMessage();
+
+        String logLine = String.format(
+                "%s [%s] %-5s %s - %s",
+                time,
+                thread,
+                level,
+                loggerName,
+                message
+        );
+
+        // 鏀捐繘鐜舰缂撳啿鍖�
+        if (LOG_BUFFER.remainingCapacity() == 0) {
+            LOG_BUFFER.pollFirst(); // 绉婚櫎鏈�鏃х殑
+        }
+        LOG_BUFFER.offerLast(logLine);
+    }
+
+    public static List<String> getRecentLogs(int limit) {
+        int size = LOG_BUFFER.size();
+        int skip = Math.max(0, size - limit);
+        return LOG_BUFFER.stream()
+                .skip(skip)
+                .collect(Collectors.toList());
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.1