feat(log): prepend browser pid to browser logs (#5569)

To differentiate between multiple browsers.
This commit is contained in:
Dmitry Gozman 2021-02-24 19:21:47 -08:00 committed by GitHub
parent 5ae2661134
commit ca8998b11e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -95,12 +95,12 @@ export async function launchProcess(options: LaunchProcessOptions): Promise<Laun
const stdout = readline.createInterface({ input: spawnedProcess.stdout }); const stdout = readline.createInterface({ input: spawnedProcess.stdout });
stdout.on('line', (data: string) => { stdout.on('line', (data: string) => {
options.log('[out] ' + data); options.log(`[pid=${spawnedProcess.pid}][out] ` + data);
}); });
const stderr = readline.createInterface({ input: spawnedProcess.stderr }); const stderr = readline.createInterface({ input: spawnedProcess.stderr });
stderr.on('line', (data: string) => { stderr.on('line', (data: string) => {
options.log('[err] ' + data); options.log(`[pid=${spawnedProcess.pid}][err] ` + data);
}); });
let processClosed = false; let processClosed = false;
@ -109,7 +109,7 @@ export async function launchProcess(options: LaunchProcessOptions): Promise<Laun
let fulfillCleanup = () => {}; let fulfillCleanup = () => {};
const waitForCleanup = new Promise<void>(f => fulfillCleanup = f); const waitForCleanup = new Promise<void>(f => fulfillCleanup = f);
spawnedProcess.once('exit', (exitCode, signal) => { spawnedProcess.once('exit', (exitCode, signal) => {
options.log(`<process did exit: exitCode=${exitCode}, signal=${signal}>`); options.log(`[pid=${spawnedProcess.pid}] <process did exit: exitCode=${exitCode}, signal=${signal}>`);
processClosed = true; processClosed = true;
helper.removeEventListeners(listeners); helper.removeEventListeners(listeners);
gracefullyCloseSet.delete(gracefullyClose); gracefullyCloseSet.delete(gracefullyClose);
@ -145,21 +145,21 @@ export async function launchProcess(options: LaunchProcessOptions): Promise<Laun
// reentrancy to this function, for example user sends SIGINT second time. // reentrancy to this function, for example user sends SIGINT second time.
// In this case, let's forcefully kill the process. // In this case, let's forcefully kill the process.
if (gracefullyClosing) { if (gracefullyClosing) {
options.log(`<forecefully close>`); options.log(`[pid=${spawnedProcess.pid}] <forecefully close>`);
killProcess(); killProcess();
await waitForClose; // Ensure the process is dead and we called options.onkill. await waitForClose; // Ensure the process is dead and we called options.onkill.
return; return;
} }
gracefullyClosing = true; gracefullyClosing = true;
options.log(`<gracefully close start>`); options.log(`[pid=${spawnedProcess.pid}] <gracefully close start>`);
await options.attemptToGracefullyClose().catch(() => killProcess()); await options.attemptToGracefullyClose().catch(() => killProcess());
await waitForCleanup; // Ensure the process is dead and we have cleaned up. await waitForCleanup; // Ensure the process is dead and we have cleaned up.
options.log(`<gracefully close end>`); options.log(`[pid=${spawnedProcess.pid}] <gracefully close end>`);
} }
// This method has to be sync to be used as 'exit' event handler. // This method has to be sync to be used as 'exit' event handler.
function killProcess() { function killProcess() {
options.log(`<kill>`); options.log(`[pid=${spawnedProcess.pid}] <kill>`);
helper.removeEventListeners(listeners); helper.removeEventListeners(listeners);
if (spawnedProcess.pid && !spawnedProcess.killed && !processClosed) { if (spawnedProcess.pid && !spawnedProcess.killed && !processClosed) {
// Force kill the browser. // Force kill the browser.