From fe060ebfa7fc7c6ae591b119b76803ec645b1c99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Mon, 27 Jan 2025 09:41:57 +0800 Subject: [PATCH] =?UTF-8?q?optimize:=20=E6=8D=95=E8=8E=B7DS=E7=9A=84?= =?UTF-8?q?=E5=90=84=E7=A7=8D=E6=9C=AA=E7=9F=A5=E5=BC=82=E5=B8=B8=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E5=B0=86=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=88=B0=E6=97=A5=E5=BF=97=E6=96=87=E4=BB=B6=E4=B8=AD?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/index.js | 4 -- packages/gui/src/background.js | 62 ++++++++++++------- packages/gui/src/bridge/backend.js | 3 +- packages/gui/src/main.js | 22 ++++++- packages/gui/src/preload.js | 10 ++- packages/mitmproxy/src/index.js | 2 +- .../proxy/mitmproxy/createRequestHandler.js | 4 +- .../mitmproxy/src/lib/proxy/tls/tlsUtils.js | 2 +- 8 files changed, 72 insertions(+), 37 deletions(-) diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 4f31826c..aede7094 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -4,10 +4,6 @@ const log = require('./utils/util.log') // 避免异常崩溃 process.on('uncaughtException', (err) => { - if (err.code === 'ECONNABORTED') { - // console.error(err.errno) - return - } log.error('Process Uncaught Exception:', err) }) diff --git a/packages/gui/src/background.js b/packages/gui/src/background.js index a2b43734..477f5950 100644 --- a/packages/gui/src/background.js +++ b/packages/gui/src/background.js @@ -93,7 +93,7 @@ function setTray () { click: () => { log.info('force quit') forceClose = true - quit() + quit('系统托盘图标-退出') }, }, ] @@ -112,12 +112,12 @@ function setTray () { // 当桌面主题更新时 if (isMac) { nativeTheme.on('updated', () => { - console.log('i am changed') + log.info('i am changed') if (nativeTheme.shouldUseDarkColors) { - console.log('i am dark.') + log.info('i am dark.') tray.setImage(iconWhitePath) } else { - console.log('i am light.') + log.info('i am light.') tray.setImage(iconBlackPath) // tray.setPressedImage(iconWhitePath) } @@ -149,10 +149,10 @@ function isLinux () { return platform === 'linux' } -function hideWin () { +function hideWin (reason = '') { if (win) { if (isLinux()) { - quit() + quit(`is linux, not hide win, do quit, ${reason}`) return } win.hide() @@ -160,12 +160,16 @@ function hideWin () { app.dock.hide() } winIsHidden = true + } else { + log.warn('win is null, do not hide win') } } function showWin () { if (win) { win.show() + } else { + log.warn('win is null, do not show win') } if (app.dock) { app.dock.show() @@ -204,7 +208,7 @@ function createWindow (startHideWindow, autoQuitIfError = true) { log.error('创建窗口失败:', e) dialog.showErrorBox('错误', `创建窗口失败: ${e.message}`) if (autoQuitIfError) { - quit() + quit('创建窗口失败') } return false } @@ -231,7 +235,7 @@ function createWindow (startHideWindow, autoQuitIfError = true) { } if (startHideWindow) { - hideWin() + hideWin('startHideWindow') } win.on('closed', async (...args) => { @@ -242,9 +246,9 @@ function createWindow (startHideWindow, autoQuitIfError = true) { ipcMain.on('close', async (event, message) => { if (message.value === 1) { - quit() + quit('ipc receive "close"') } else { - hideWin() + hideWin('ipc receive "close"') } }) @@ -255,7 +259,7 @@ function createWindow (startHideWindow, autoQuitIfError = true) { } e.preventDefault() if (isLinux()) { - quit() + quit('win close') return } const config = DevSidecar.api.config.get() @@ -265,16 +269,16 @@ function createWindow (startHideWindow, autoQuitIfError = true) { win.webContents.send('close.showTip', closeStrategy) } else if (closeStrategy === 1) { // 直接退出 - quit() + quit('win close') } else if (closeStrategy === 2) { // 隐藏窗口 - hideWin() + hideWin('win close') } }) win.on('session-end', async (e, ...args) => { log.info('win session-end:', e, ...args) - await quit() + await quit('win session-end') }) const shortcut = (event, input) => { @@ -302,7 +306,7 @@ function createWindow (startHideWindow, autoQuitIfError = true) { } win.webContents.executeJavaScript('config') .then((value) => { - console.info('window.config:', value, ', key:', input.key) + log.info('window.config:', value, ', key:', input.key) if (!value || (value.disableBeforeInputEvent !== true && value.disableBeforeInputEvent !== 'true')) { shortcut(event, input) } @@ -315,6 +319,14 @@ function createWindow (startHideWindow, autoQuitIfError = true) { // 监听渲染进程发送过来的消息 win.webContents.on('ipc-message', (event, channel, message, ...args) => { console.info('win ipc-message:', event, channel, message, ...args) + + // 记录日志 + if (channel && channel.startsWith('[ERROR]')) { + log.error('win ipc-message:', channel.substring(7), message, ...args) + } else { + log.info('win ipc-message:', channel, message, ...args) + } + if (channel === 'change-showHideShortcut') { registerShowHideShortcut(message) } @@ -324,9 +336,12 @@ function createWindow (startHideWindow, autoQuitIfError = true) { } async function beforeQuit () { + log.info('before quit') return DevSidecar.api.shutdown() } -async function quit () { +async function quit (reason) { + log.info('app quit:', reason) + if (tray) { tray.displayBalloon({ title: '正在关闭', content: '关闭中,请稍候。。。' }) } @@ -404,7 +419,7 @@ try { // 禁止双开 const isFirstInstance = app.requestSingleInstanceLock() if (!isFirstInstance) { - log.info('is second instance') + log.info('app quit: is second instance') setTimeout(() => { app.quit() }, 1000) @@ -412,7 +427,7 @@ try { app.on('before-quit', async () => { log.info('before-quit') if (process.platform === 'darwin') { - quit() + quit('before quit') } }) app.on('will-quit', () => { @@ -433,7 +448,7 @@ try { // On macOS it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q if (process.platform !== 'darwin') { - quit() + quit('window-all-closed') } }) @@ -489,7 +504,7 @@ try { e.preventDefault() } log.info('系统关机,恢复代理设置') - await quit() + await quit('系统关机') }) }) } @@ -501,19 +516,18 @@ try { if (process.platform === 'win32') { process.on('message', (data) => { if (data === 'graceful-exit') { - quit() + quit('graceful-exit') } }) } else { process.on('SIGINT', () => { - quit() + quit('SIGINT') }) } } // 系统关机和重启时的操作 process.on('exit', () => { - log.info('进程结束,退出app') - quit() + quit('进程结束,退出app') }) log.info('background.js finished') diff --git a/packages/gui/src/bridge/backend.js b/packages/gui/src/bridge/backend.js index 404b11c4..b0c7c632 100644 --- a/packages/gui/src/bridge/backend.js +++ b/packages/gui/src/bridge/backend.js @@ -3,6 +3,7 @@ import autoStart from './auto-start/backend' import fileSelector from './file-selector/backend' import tongji from './tongji/backend' import update from './update/backend' +import log from '../utils/util.log' const modules = { api, // 核心接口模块 @@ -14,7 +15,7 @@ const modules = { export default { install (context) { for (const module in modules) { - console.log('install', module) + log.info('install module:', module) modules[module].install(context) } }, diff --git a/packages/gui/src/main.js b/packages/gui/src/main.js index ad2a90c3..dff172aa 100644 --- a/packages/gui/src/main.js +++ b/packages/gui/src/main.js @@ -1,6 +1,7 @@ import antd from 'ant-design-vue' import Vue from 'vue' import VueRouter from 'vue-router' +import { ipcRenderer } from 'electron' import view from './view' import App from './view/App.vue' import DsContainer from './view/components/container' @@ -25,9 +26,14 @@ try { }) view.initApi(app).then(async (api) => { // 初始化status - await view.initPre(Vue, api) - app.$mount('#app') - view.initModules(app, router) + try { + await view.initPre(Vue, api) + app.$mount('#app') + view.initModules(app, router) + } catch (e) { + console.error('view初始化出现未知异常:', e) + ipcRenderer.send('view初始化出现未知异常:', e) + } }) // fix vue-router NavigationDuplicated @@ -41,6 +47,16 @@ try { } console.info('main.js finished') + ipcRenderer.send('main.js finished') } catch (e) { console.error('页面加载出现未知异常:', e) + ipcRenderer.send('[ERROR] 页面加载出现未知异常:', e) +} + +try { + window.onerror = (message, source, lineno, colno, error) => { + ipcRenderer.send(`[ERROR] JavaScript脚本异常:Error in ${source} at line ${lineno}: ${message}`, error) + } +} catch (e) { + console.error('监听 window.onerror 出现异常:', e) } diff --git a/packages/gui/src/preload.js b/packages/gui/src/preload.js index 4095340e..f4c7262d 100644 --- a/packages/gui/src/preload.js +++ b/packages/gui/src/preload.js @@ -1 +1,9 @@ -window.ipcRenderer = require('electron').ipcRenderer +try { + window.ipcRenderer = require('electron').ipcRenderer + + window.onerror = (message, source, lineno, colno, error) => { + window.ipcRenderer.send(`[ERROR] JavaScript脚本异常:Error in ${source} at line ${lineno}: ${message}`, error) + } +} catch (e) { + console.error('load electron.ipcRenderer error:', e) +} diff --git a/packages/mitmproxy/src/index.js b/packages/mitmproxy/src/index.js index 06d60139..4a739e48 100644 --- a/packages/mitmproxy/src/index.js +++ b/packages/mitmproxy/src/index.js @@ -112,7 +112,7 @@ function registerProcessListener () { log.info('代理服务进程被关闭:', code, signal) }) process.on('beforeExit', (code, signal) => { - console.log('Process beforeExit event with code: ', code, signal) + log.info('Process beforeExit event with code: ', code, signal) }) process.on('SIGPIPE', (code, signal) => { log.warn('sub Process SIGPIPE', code, signal) diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js index a6e8fa09..917f46b5 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js @@ -160,7 +160,7 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e } else { log.info(`请求返回: 【${proxyRes.statusCode}】${url}, cost: ${cost} ms`) } - // console.log('request:', proxyReq, proxyReq.socket) + // log.info('request:', proxyReq, proxyReq.socket) if (cost > MAX_SLOW_TIME) { countSlow(isDnsIntercept, `代理请求成功但太慢, cost: ${cost} ms > ${MAX_SLOW_TIME} ms`) @@ -246,7 +246,7 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e const proxyRes = await proxyRequestPromise() // proxyRes.on('data', (chunk) => { - // // console.log('BODY: ') + // // log.info('BODY: ') // }) proxyRes.on('error', (error) => { countSlow(null, `error: ${error.message}`) diff --git a/packages/mitmproxy/src/lib/proxy/tls/tlsUtils.js b/packages/mitmproxy/src/lib/proxy/tls/tlsUtils.js index a2d0d2eb..5a574fc9 100644 --- a/packages/mitmproxy/src/lib/proxy/tls/tlsUtils.js +++ b/packages/mitmproxy/src/lib/proxy/tls/tlsUtils.js @@ -15,7 +15,7 @@ const pki = forge.pki // const user = os.userInfo() // username = user.username // } catch (e) { -// console.log('get userinfo error', e) +// log.info('get userinfo error', e) // } utils.createCA = function (CN) {