豆豆友情提示:这是一个非官方 GitHub 代理镜像,主要用于网络测试或访问加速。请勿在此进行登录、注册或处理任何敏感信息。进行这些操作请务必访问官方网站 github.com。 Raw 内容也通过此代理提供。
Skip to content

Commit ae4eb0c

Browse files
committed
chore: exit by flushing the log stream before termination
1 parent 931dde4 commit ae4eb0c

File tree

2 files changed

+26
-25
lines changed

2 files changed

+26
-25
lines changed

src/logger.ts

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,26 +31,14 @@ export function saveLogsToFile(fileName: string): fs.WriteStream {
3131
return logFile;
3232
}
3333

34-
export function saveLogsToFileSync(fileName: string): void {
35-
debug.enable(namespacesToEnable.join(','));
36-
37-
let fd: number | undefined;
38-
try {
39-
fd = fs.openSync(fileName, 'a+');
40-
} catch (error) {
41-
console.error(`Error when opening log file: ${error.message}`);
42-
process.exit(1);
43-
}
44-
45-
debug.log = function (...chunks: any[]) {
46-
if (fd !== undefined) {
47-
try {
48-
fs.writeSync(fd, `${chunks.join(' ')}\n`);
49-
} catch (error) {
50-
console.error(`Error when writing to log file: ${error.message}`);
51-
}
52-
}
53-
};
34+
export function flushLogs(logFile: fs.WriteStream, timeoutMs = 2000): Promise<void> {
35+
return new Promise((resolve, reject) => {
36+
const timeout = setTimeout(reject, timeoutMs);
37+
logFile.end(() => {
38+
clearTimeout(timeout);
39+
resolve();
40+
});
41+
});
5442
}
5543

5644
export const logger = debug(mcpDebugNamespace);

src/telemetry/watchdog/main.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import process from 'node:process';
88
import readline from 'node:readline';
99
import {parseArgs} from 'node:util';
1010

11-
import {logger, saveLogsToFileSync} from '../../logger.js';
11+
import {logger, flushLogs, saveLogsToFile} from '../../logger.js';
12+
import type {WriteStream} from 'node:fs';
1213
import type {OsType} from '../types.js';
1314
import {WatchdogMessageType} from '../types.js';
1415

@@ -29,16 +30,28 @@ function main() {
2930
const appVersion = values['app-version'];
3031
const osType = parseInt(values['os-type'] ?? '', 10);
3132
const logFile = values['log-file'];
33+
let logStream: WriteStream | undefined;
3234
if (logFile) {
33-
saveLogsToFileSync(logFile);
35+
logStream = saveLogsToFile(logFile);
3436
}
3537

38+
const exit = (code: number) => {
39+
if (!logStream) {
40+
process.exit(code);
41+
}
42+
43+
flushLogs(logStream).finally(() => {
44+
process.exit(code);
45+
});
46+
};
47+
3648
if (isNaN(parentPid) || !appVersion || isNaN(osType)) {
3749
logger(
3850
'Invalid arguments provided for watchdog process: ',
3951
JSON.stringify({parentPid, appVersion, osType}),
4052
);
41-
process.exit(1);
53+
exit(1);
54+
return;
4255
}
4356

4457
logger(
@@ -69,11 +82,11 @@ function main() {
6982
.sendShutdownEvent()
7083
.then(() => {
7184
logger('Shutdown event sent. Exiting.');
72-
process.exit(0);
85+
exit(0);
7386
})
7487
.catch(err => {
7588
logger('Failed to send shutdown event', err);
76-
process.exit(1);
89+
exit(1);
7790
});
7891
}
7992

0 commit comments

Comments
 (0)