|
@@ -0,0 +1,33 @@
|
|
|
+const isElectron = () =>
|
|
|
+ typeof window !== 'undefined' &&
|
|
|
+ window.require &&
|
|
|
+ window.require('electron')?.ipcRenderer;
|
|
|
+
|
|
|
+let ipcRenderer = null;
|
|
|
+if (isElectron()) {
|
|
|
+ try { ipcRenderer = window.require('electron').ipcRenderer; } catch {}
|
|
|
+}
|
|
|
+
|
|
|
+function proxyLog(level) {
|
|
|
+ const original = console[level];
|
|
|
+ return (...args) => {
|
|
|
+ const msg = args.map(v => typeof v === 'object' ? JSON.stringify(v) : String(v)).join(' ');
|
|
|
+ original(...args); // ① 控制台始终打印
|
|
|
+ if (ipcRenderer) { // ② Electron 环境
|
|
|
+ ipcRenderer.invoke('write-log', level, msg).catch(() => {});
|
|
|
+ } else if (typeof fetch !== 'undefined') {
|
|
|
+ // ③ 纯 Web 或 pkg-static:发一条异步 POST /log,不阻塞、不报错
|
|
|
+ fetch('/log', {
|
|
|
+ method: 'POST',
|
|
|
+ headers: { 'Content-Type': 'application/json' },
|
|
|
+ body: JSON.stringify({ level, msg })
|
|
|
+ }).catch(() => {}); // 404 也不抛错
|
|
|
+ }
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+export const logger = {
|
|
|
+ log: proxyLog('log'),
|
|
|
+ warn: proxyLog('warn'),
|
|
|
+ error: proxyLog('error')
|
|
|
+};
|