diff --git a/src/vs/workbench/api/common/extHostExtensionService.ts b/src/vs/workbench/api/common/extHostExtensionService.ts index 5f66839baed..dbbd8cf7be7 100644 --- a/src/vs/workbench/api/common/extHostExtensionService.ts +++ b/src/vs/workbench/api/common/extHostExtensionService.ts @@ -53,6 +53,7 @@ export const IHostUtils = createDecorator('IHostUtils'); export interface IHostUtils { readonly _serviceBrand: undefined; + readonly pid: number | undefined; exit(code: number): void; exists(path: string): Promise; realpath(path: string): Promise; @@ -621,8 +622,10 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme } public async $extensionTestsExit(code: number): Promise { - this._logService.info(`extension host terminating: test runner requested exit with code ${code}`); - this._logService.info(`exiting with code ${code}`); + this._logService.info(`Extension host terminating: test runner requested exit with code ${code}`); + if (this._hostUtils.pid) { + this._logService.info(`Extension host with pid ${this._hostUtils.pid} exiting with code ${code}`); + } this._logService.flush(); this._hostUtils.exit(code); } @@ -638,7 +641,7 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme .then(() => this._handleEagerExtensions()) .then(() => { this._eagerExtensionsActivated.open(); - this._logService.info(`eager extensions activated`); + this._logService.info(`Eager extensions activated`); }); } diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index 3b3581d81aa..b237c4e4e63 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -94,7 +94,7 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService { } let r: T | null = null; activationTimesBuilder.codeLoadingStart(); - this._logService.info(`ExtensionService#loadCommonJSModule ${module.toString(true)}`); + this._logService.trace(`ExtensionService#loadCommonJSModule ${module.toString(true)}`); this._logService.flush(); try { if (extensionId) { diff --git a/src/vs/workbench/services/extensions/common/extensionHostMain.ts b/src/vs/workbench/services/extensions/common/extensionHostMain.ts index 9e5551bccb4..8d6afdbfdad 100644 --- a/src/vs/workbench/services/extensions/common/extensionHostMain.ts +++ b/src/vs/workbench/services/extensions/common/extensionHostMain.ts @@ -70,7 +70,11 @@ export class ExtensionHostMain { this._logService = instaService.invokeFunction(accessor => accessor.get(ILogService)); performance.mark(`code/extHost/didCreateServices`); - this._logService.info('extension host started'); + if (this._hostUtils.pid) { + this._logService.info(`Extension host with pid ${this._hostUtils.pid} started`); + } else { + this._logService.info(`Extension host started`); + } this._logService.trace('initData', initData); // ugly self - inject @@ -136,7 +140,11 @@ export class ExtensionHostMain { // Give extensions 1 second to wrap up any async dispose, then exit in at most 4 seconds setTimeout(() => { Promise.race([timeout(4000), extensionsDeactivated]).finally(() => { - this._logService.info(`exiting with code 0`); + if (this._hostUtils.pid) { + this._logService.info(`Extension host with pid ${this._hostUtils.pid} exiting with code 0`); + } else { + this._logService.info(`Extension host exiting with code 0`); + } this._logService.flush(); this._logService.dispose(); this._hostUtils.exit(0); diff --git a/src/vs/workbench/services/extensions/common/extensionHostManager.ts b/src/vs/workbench/services/extensions/common/extensionHostManager.ts index cd88d6a6167..ba8497395c2 100644 --- a/src/vs/workbench/services/extensions/common/extensionHostManager.ts +++ b/src/vs/workbench/services/extensions/common/extensionHostManager.ts @@ -102,7 +102,8 @@ class ExtensionHostManager extends Disposable implements IExtensionHostManager { initialActivationEvents: string[], @IInstantiationService private readonly _instantiationService: IInstantiationService, @IWorkbenchEnvironmentService private readonly _environmentService: IWorkbenchEnvironmentService, - @ITelemetryService private readonly _telemetryService: ITelemetryService + @ITelemetryService private readonly _telemetryService: ITelemetryService, + @ILogService private readonly _logService: ILogService, ) { super(); this._cachedActivationEvents = new Map>(); @@ -135,8 +136,8 @@ class ExtensionHostManager extends Disposable implements IExtensionHostManager { return { value: this._createExtensionHostCustomers(protocol) }; }, (err) => { - console.error(`Error received from starting extension host (kind: ${extensionHostKindToString(this.kind)})`); - console.error(err); + this._logService.error(`Error received from starting extension host (kind: ${extensionHostKindToString(this.kind)})`); + this._logService.error(err); // Track errors during extension host startup const failureTelemetryEvent: ExtensionHostStartupEvent = { diff --git a/src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts b/src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts index 527c8523e16..00b73dbff90 100644 --- a/src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts +++ b/src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts @@ -333,6 +333,7 @@ export async function startExtensionHostProcess(): Promise { // host abstraction const hostUtils = new class NodeHost implements IHostUtils { declare readonly _serviceBrand: undefined; + public readonly pid = process.pid; exit(code: number) { nativeExit(code); } exists(path: string) { return Promises.exists(path); } realpath(path: string) { return realpath(path); } diff --git a/src/vs/workbench/services/extensions/worker/extensionHostWorker.ts b/src/vs/workbench/services/extensions/worker/extensionHostWorker.ts index 3172afe4833..21ebf4db806 100644 --- a/src/vs/workbench/services/extensions/worker/extensionHostWorker.ts +++ b/src/vs/workbench/services/extensions/worker/extensionHostWorker.ts @@ -143,6 +143,7 @@ if ((self).Worker) { const hostUtil = new class implements IHostUtils { declare readonly _serviceBrand: undefined; + public readonly pid = undefined; exit(_code?: number | undefined): void { nativeClose(); }