From b8f6042f36592367dbe0623a51d8b05326b9572b Mon Sep 17 00:00:00 2001 From: geekgeekrun Date: Thu, 12 Feb 2026 06:06:41 +0800 Subject: [PATCH] print log when launch with `process.env.NODE_ENV === 'development'` --- packages/ui/src/main/index.ts | 9 +++- packages/ui/src/main/utils/overrideConsole.ts | 42 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 packages/ui/src/main/utils/overrideConsole.ts diff --git a/packages/ui/src/main/index.ts b/packages/ui/src/main/index.ts index dcf690f..d9592e6 100644 --- a/packages/ui/src/main/index.ts +++ b/packages/ui/src/main/index.ts @@ -1,8 +1,15 @@ +import overrideConsole from './utils/overrideConsole' import minimist from 'minimist' import { runCommon } from './features/run-common' import { launchDaemon } from './flow/OPEN_SETTING_WINDOW/launch-daemon' import { app } from 'electron' +const isUiDev = process.env.NODE_ENV === 'development' +const enableLogToFile = process.env.GEEKGEEKRUN_ENABLE_LOG_TO_FILE === String(1) +if (isUiDev || enableLogToFile) { + overrideConsole() +} + // 捕获未处理的 EPIPE 错误 process.on('uncaughtException', (err) => { if (err?.code === 'EPIPE' || err?.code === 'ERR_STREAM_DESTROYED') { @@ -11,7 +18,7 @@ process.on('uncaughtException', (err) => { throw err }) -const isUiDev = process.env.NODE_ENV === 'development' +console.log(process.argv) const commandlineArgs = minimist(isUiDev ? process.argv.slice(2) : process.argv.slice(1)) console.log(commandlineArgs) diff --git a/packages/ui/src/main/utils/overrideConsole.ts b/packages/ui/src/main/utils/overrideConsole.ts new file mode 100644 index 0000000..7e70c47 --- /dev/null +++ b/packages/ui/src/main/utils/overrideConsole.ts @@ -0,0 +1,42 @@ +import path from 'node:path' +import os from 'node:os' +import fs from 'node:fs' +import dayjs from 'dayjs' + +export default function overrideConsole() { + const originConsoleLog = console.log.bind(console) + const originConsoleWarn = console.warn.bind(console) + const originConsoleError = console.error.bind(console) + + const runtimeFolderPath = path.join(os.homedir(), '.geekgeekrun') + const logDirPath = path.join(runtimeFolderPath, 'log') + if (!fs.existsSync(logDirPath)) { + fs.mkdirSync(logDirPath, { recursive: true }) + } + + const logFileStream = fs.createWriteStream(path.join(logDirPath, `log.log`), { + flags: 'a' // 追加模式 + }) + const warnFileStream = fs.createWriteStream(path.join(logDirPath, `warn.log`), { + flags: 'a' // 追加模式 + }) + const errorFileStream = fs.createWriteStream(path.join(logDirPath, `error.log`), { + flags: 'a' // 追加模式 + }) + + console.log = (...args: any[]) => { + const lineHead = `${dayjs().format('YYYY-MM-DD HH:mm:ss.SSS')} [log][PID=${process.pid}]` + originConsoleLog(lineHead, ...args) + logFileStream.write([lineHead, args.map((arg) => JSON.stringify(arg))].join(' ') + '\n') + } + console.warn = (...args: any[]) => { + const lineHead = `${dayjs().format('YYYY-MM-DD HH:mm:ss.SSS')} [warn][PID=${process.pid}]` + originConsoleWarn(lineHead, ...args) + warnFileStream.write([lineHead, args.map((arg) => JSON.stringify(arg))].join(' ') + '\n') + } + console.error = (...args: any[]) => { + const lineHead = `${dayjs().format('YYYY-MM-DD HH:mm:ss.SSS')} [warn][PID=${process.pid}]` + originConsoleError(lineHead, ...args) + errorFileStream.write([lineHead, args.map((arg) => JSON.stringify(arg))].join(' ') + '\n') + } +}