From bc60d930bd5e3c3b147da8f37eb14777636f8313 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Wed, 6 May 2020 16:24:52 +0200 Subject: [PATCH] Move desktop log service to workbech/services --- .../electron-browser/desktop.main.ts | 63 +--------------- .../log/electron-browser/logService.ts | 72 +++++++++++++++++++ 2 files changed, 75 insertions(+), 60 deletions(-) create mode 100644 src/vs/workbench/services/log/electron-browser/logService.ts diff --git a/src/vs/workbench/electron-browser/desktop.main.ts b/src/vs/workbench/electron-browser/desktop.main.ts index e857eec894f..40c499137f5 100644 --- a/src/vs/workbench/electron-browser/desktop.main.ts +++ b/src/vs/workbench/electron-browser/desktop.main.ts @@ -20,16 +20,15 @@ import { ServiceCollection } from 'vs/platform/instantiation/common/serviceColle import { KeyboardMapperFactory } from 'vs/workbench/services/keybinding/electron-browser/nativeKeymapService'; import { INativeWindowConfiguration } from 'vs/platform/windows/node/window'; import { ISingleFolderWorkspaceIdentifier, IWorkspaceInitializationPayload, ISingleFolderWorkspaceInitializationPayload, reviveWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces'; -import { ConsoleLogService, MultiplexLogService, ILogService, ConsoleLogInMainService, DelegatedLogService } from 'vs/platform/log/common/log'; +import { ILogService } from 'vs/platform/log/common/log'; import { NativeStorageService } from 'vs/platform/storage/node/storageService'; -import { LoggerChannelClient, FollowerLogService } from 'vs/platform/log/common/logIpc'; import { Schemas } from 'vs/base/common/network'; import { sanitizeFilePath } from 'vs/base/common/extpath'; import { GlobalStorageDatabaseChannelClient } from 'vs/platform/storage/node/storageIpc'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IStorageService } from 'vs/platform/storage/common/storage'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; +import { Disposable } from 'vs/base/common/lifecycle'; import { registerWindowDriver } from 'vs/platform/driver/electron-browser/driver'; import { IMainProcessService, MainProcessService } from 'vs/platform/ipc/electron-browser/mainProcessService'; import { RemoteAuthorityResolverService } from 'vs/platform/remote/electron-browser/remoteAuthorityResolverService'; @@ -41,7 +40,6 @@ import { IFileService } from 'vs/platform/files/common/files'; import { DiskFileSystemProvider } from 'vs/platform/files/electron-browser/diskFileSystemProvider'; import { RemoteFileSystemProvider } from 'vs/workbench/services/remote/common/remoteAgentFileSystemChannel'; import { ConfigurationCache } from 'vs/workbench/services/configuration/node/configurationCache'; -import { SpdLogService } from 'vs/platform/log/node/spdlogService'; import { SignService } from 'vs/platform/sign/node/signService'; import { ISignService } from 'vs/platform/sign/common/sign'; import { FileUserDataProvider } from 'vs/workbench/services/userData/common/fileUserDataProvider'; @@ -50,8 +48,7 @@ import { IProductService } from 'vs/platform/product/common/productService'; import product from 'vs/platform/product/common/product'; import { NativeResourceIdentityService } from 'vs/platform/resource/node/resourceIdentityServiceImpl'; import { IResourceIdentityService } from 'vs/platform/resource/common/resourceIdentityService'; -import { ILifecycleService, LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; -import { BufferLogService } from 'vs/platform/log/common/bufferLog'; +import { DesktopLogService } from 'vs/workbench/services/log/electron-browser/logService'; class DesktopMain extends Disposable { @@ -124,12 +121,6 @@ class DesktopMain extends Disposable { // Startup const instantiationService = workbench.startup(); - // Lifecycle Listeners - instantiationService.invokeFunction(accessor => { - const lifecycleService = accessor.get(ILifecycleService); - lifecycleService.when(LifecyclePhase.Restored).then(() => services.logService.init()); - }); - // Window this._register(instantiationService.createInstance(NativeWindow)); @@ -324,54 +315,6 @@ class DesktopMain extends Disposable { } -class DesktopLogService extends DelegatedLogService { - - private readonly bufferSpdLogService: BufferLogService | undefined; - private readonly windowId: number; - private readonly environmentService: NativeWorkbenchEnvironmentService; - - constructor(windowId: number, mainProcessService: IMainProcessService, environmentService: NativeWorkbenchEnvironmentService) { - - const disposables = new DisposableStore(); - const loggerClient = new LoggerChannelClient(mainProcessService.getChannel('logger')); - let bufferSpdLogService: BufferLogService | undefined; - - // Extension development test CLI: forward everything to main side - const loggers: ILogService[] = []; - if (environmentService.isExtensionDevelopment && !!environmentService.extensionTestsLocationURI) { - loggers.push( - disposables.add(new ConsoleLogInMainService(loggerClient, environmentService.configuration.logLevel)) - ); - } - - // Normal logger: spdylog and console - else { - bufferSpdLogService = disposables.add(new BufferLogService(environmentService.configuration.logLevel)); - loggers.push( - disposables.add(new ConsoleLogService(environmentService.configuration.logLevel)), - bufferSpdLogService, - ); - } - - const multiplexLogger = disposables.add(new MultiplexLogService(loggers)); - const followerLogger = disposables.add(new FollowerLogService(loggerClient, multiplexLogger)); - super(followerLogger); - - this.bufferSpdLogService = bufferSpdLogService; - this.windowId = windowId; - this.environmentService = environmentService; - - this._register(disposables); - } - - init(): void { - if (this.bufferSpdLogService) { - this.bufferSpdLogService.logger = this._register(new SpdLogService(`renderer${this.windowId}`, this.environmentService.logsPath, this.getLevel())); - this.trace('Created Spdlogger'); - } - } -} - export function main(configuration: INativeWindowConfiguration): Promise { const workbench = new DesktopMain(configuration); diff --git a/src/vs/workbench/services/log/electron-browser/logService.ts b/src/vs/workbench/services/log/electron-browser/logService.ts new file mode 100644 index 00000000000..6164cb48775 --- /dev/null +++ b/src/vs/workbench/services/log/electron-browser/logService.ts @@ -0,0 +1,72 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { DelegatedLogService, ILogService, ConsoleLogInMainService, ConsoleLogService, MultiplexLogService } from 'vs/platform/log/common/log'; +import { BufferLogService } from 'vs/platform/log/common/bufferLog'; +import { NativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-browser/environmentService'; +import { IMainProcessService } from 'vs/platform/ipc/electron-browser/mainProcessService'; +import { LoggerChannelClient, FollowerLogService } from 'vs/platform/log/common/logIpc'; +import { SpdLogService } from 'vs/platform/log/node/spdlogService'; +import { DisposableStore } from 'vs/base/common/lifecycle'; +import { IWorkbenchContribution, IWorkbenchContributionsRegistry, Extensions } from 'vs/workbench/common/contributions'; +import { Registry } from 'vs/platform/registry/common/platform'; +import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; + +export class DesktopLogService extends DelegatedLogService { + + private readonly bufferSpdLogService: BufferLogService | undefined; + private readonly windowId: number; + private readonly environmentService: NativeWorkbenchEnvironmentService; + + constructor(windowId: number, mainProcessService: IMainProcessService, environmentService: NativeWorkbenchEnvironmentService) { + + const disposables = new DisposableStore(); + const loggerClient = new LoggerChannelClient(mainProcessService.getChannel('logger')); + let bufferSpdLogService: BufferLogService | undefined; + + // Extension development test CLI: forward everything to main side + const loggers: ILogService[] = []; + if (environmentService.isExtensionDevelopment && !!environmentService.extensionTestsLocationURI) { + loggers.push( + disposables.add(new ConsoleLogInMainService(loggerClient, environmentService.configuration.logLevel)) + ); + } + + // Normal logger: spdylog and console + else { + bufferSpdLogService = disposables.add(new BufferLogService(environmentService.configuration.logLevel)); + loggers.push( + disposables.add(new ConsoleLogService(environmentService.configuration.logLevel)), + bufferSpdLogService, + ); + } + + const multiplexLogger = disposables.add(new MultiplexLogService(loggers)); + const followerLogger = disposables.add(new FollowerLogService(loggerClient, multiplexLogger)); + super(followerLogger); + + this.bufferSpdLogService = bufferSpdLogService; + this.windowId = windowId; + this.environmentService = environmentService; + + this._register(disposables); + } + + init(): void { + if (this.bufferSpdLogService) { + this.bufferSpdLogService.logger = this._register(new SpdLogService(`renderer${this.windowId}`, this.environmentService.logsPath, this.getLevel())); + this.trace('Created Spdlogger'); + } + } +} + +class DesktopLogServiceInitContribution implements IWorkbenchContribution { + constructor(@ILogService logService: ILogService) { + if (logService instanceof DesktopLogService) { + logService.init(); + } + } +} +Registry.as(Extensions.Workbench).registerWorkbenchContribution(DesktopLogServiceInitContribution, LifecyclePhase.Restored); -- GitLab