Quellcode durchsuchen

feat(logger): Add safe stringify for circular references and improve logging for Electron and web environments

sw vor 3 Wochen
Ursprung
Commit
3903389278
1 geänderte Dateien mit 15 neuen und 3 gelöschten Zeilen
  1. 15 3
      src/log/logger.js

+ 15 - 3
src/log/logger.js

@@ -7,11 +7,23 @@ let ipcRenderer = null;
 if (isElectron()) {
   try { ipcRenderer = window.require('electron').ipcRenderer; } catch {}
 }
-
+//避免obj是递归引用导致崩溃
+function safeStringify(obj) {
+  const cache = new Set();
+  return JSON.stringify(obj, (key, value) => {
+    if (typeof value === 'object' && value !== null) {
+      if (cache.has(value)) {
+        return '[Circular]';
+      }
+      cache.add(value);
+    }
+    return value;
+  });
+}
 function proxyLog(level) {
   const original = console[level];
   return (...args) => {
-    const msg = args.map(v => typeof v === 'object' ? JSON.stringify(v) : String(v)).join(' ');
+    const msg = args.map(v => typeof v === 'object' ? safeStringify(v) : String(v)).join(' ');
     original(...args);                       // ① 控制台始终打印
     if (ipcRenderer) {                       // ② Electron 环境
       ipcRenderer.invoke('write-log', level, msg).catch(() => {});
@@ -20,7 +32,7 @@ function proxyLog(level) {
       fetch('/log', {
         method: 'POST',
         headers: { 'Content-Type': 'application/json' },
-        body: JSON.stringify({ level, msg })
+        body: safeStringify({ level, msg })
       }).catch(() => {}); // 404 也不抛错
     }
   };