From fffb1c34429be15e149c95b76c238bce9428fa3a Mon Sep 17 00:00:00 2001 From: linonetwo Date: Sun, 20 Jul 2025 20:41:12 +0800 Subject: [PATCH] fix: logger error when ctrl+c on mac --- src/main.ts | 8 ++------ src/services/libs/log/index.ts | 32 +++++++++++++++++++------------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/main.ts b/src/main.ts index 11fe64ac..4cd75f12 100755 --- a/src/main.ts +++ b/src/main.ts @@ -176,19 +176,15 @@ app.on( 'before-quit', async (): Promise => { logger.info('App before-quit'); + destroyLogger(); await Promise.all([ databaseService.immediatelyStoreSettingsToFile(), wikiService.stopAllWiki(), windowService.clearWindowsReference(), ]); - destroyLogger(); - app.exit(0); + uninstall?.uninstall(); }, ); -app.on('quit', () => { - uninstall?.uninstall(); - logger.info('App quit'); -}); if (!isTest) { unhandled({ diff --git a/src/services/libs/log/index.ts b/src/services/libs/log/index.ts index c2d27d77..b48aaffe 100644 --- a/src/services/libs/log/index.ts +++ b/src/services/libs/log/index.ts @@ -1,7 +1,7 @@ import { LOG_FOLDER } from '@/constants/appPaths'; import winston, { format } from 'winston'; -import RendererTransport from './rendererTransport'; import 'winston-daily-rotate-file'; +import RendererTransport from './rendererTransport'; export * from './wikiOutput'; @@ -42,17 +42,23 @@ const logger = ( ) as winston.Logger; export { logger }; +/** + * Prevent MacOS error `Unhandled Error Error: write EIO at afterWriteDispatched` + */ export function destroyLogger(): void { - logger.close(); - logger.removeAllListeners(); - logger.destroy(); - logger.write = (chunk: unknown) => { - // no console here, otherwise will cause `Error: write EIO` - // console.log('Message after logger destroyed', chunk); - return true; - }; - logger.error = (message: unknown) => { - // console.log('Error Message after logger destroyed', message); - return logger; - }; + logger.transports.forEach((t) => { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (t) { + try { + // May cause `TypeError: Cannot read properties of undefined (reading 'length') at DerivedLogger.remove` + logger.remove(t); + // eslint-disable-next-line no-empty + } catch {} + } + }); + // Prevent `Error: write EIO at afterWriteDispatched (node:internal/stream_base_commons:159:15)` + console.error = () => {}; + console.info = () => {}; + console.warn = () => {}; + console.debug = () => {}; }