Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/vscode.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortanhakabir <takabir@microsoft.com>2022-05-11 19:31:08 +0300
committerGitHub <noreply@github.com>2022-05-11 19:31:08 +0300
commit2872af56af9d74228acb3974664b78b219a2f6d3 (patch)
tree884d27617b3e71b9edd3c6282cfc7c6fb2909d52
parent2297ad5c546b455421e942743e117a3c7c9a873a (diff)
Expose logger in web embedder API (#147035)
* Expose output channel in web embedder API * :lipstick: * Checkpoint * Remove file dependency on embedder logs * Add WebEmbedderLog to manage logging for web embedders * Make disposable * Remove diff from main * - Introduce logger for embedder - Register log chanel only when logging is attempted * Add extension name ids to embedder logs * Create separate top-level domain for embedder logging Re: https://github.com/microsoft/vscode/pull/147035#discussion_r858316123 * Remove id in embedder logging API Re: https://github.com/microsoft/vscode/pull/147035/commits/a88bc68f4002627fc8d547291b17a69f388c4ff1#r868971486 Co-authored-by: Benjamin Pasero <benjamin.pasero@gmail.com> Co-authored-by: Sandeep Somavarapu <sasomava@microsoft.com>
-rw-r--r--src/vs/workbench/browser/web.api.ts12
-rw-r--r--src/vs/workbench/browser/web.factory.ts11
-rw-r--r--src/vs/workbench/browser/web.main.ts14
-rw-r--r--src/vs/workbench/services/output/common/delayedLogChannel.ts33
-rw-r--r--src/vs/workbench/workbench.web.main.ts5
5 files changed, 73 insertions, 2 deletions
diff --git a/src/vs/workbench/browser/web.api.ts b/src/vs/workbench/browser/web.api.ts
index effacb4a75f..f41ce51c118 100644
--- a/src/vs/workbench/browser/web.api.ts
+++ b/src/vs/workbench/browser/web.api.ts
@@ -39,6 +39,17 @@ export interface IWorkbench {
executeCommand(command: string, ...args: any[]): Promise<unknown>;
};
+ logger: {
+
+ /**
+ * Logging for embedder.
+ *
+ * @param level The log level of the message to be printed.
+ * @param message Message to be printed.
+ */
+ log(level: LogLevel, message: string): void;
+ };
+
env: {
/**
@@ -73,6 +84,7 @@ export interface IWorkbench {
};
window: {
+
/**
* Show progress in the editor. Progress is shown while running the given callback
* and while the promise it returned isn't resolved nor rejected.
diff --git a/src/vs/workbench/browser/web.factory.ts b/src/vs/workbench/browser/web.factory.ts
index 49c7eb489e9..993aa0ce071 100644
--- a/src/vs/workbench/browser/web.factory.ts
+++ b/src/vs/workbench/browser/web.factory.ts
@@ -15,6 +15,7 @@ import { asArray } from 'vs/base/common/arrays';
import { IProgress, IProgressCompositeOptions, IProgressDialogOptions, IProgressNotificationOptions, IProgressOptions, IProgressStep, IProgressWindowOptions } from 'vs/platform/progress/common/progress';
import { IObservableValue } from 'vs/base/common/observableValue';
import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
+import { LogLevel } from 'vs/platform/log/common/log';
let created = false;
const workbenchPromise = new DeferredPromise<IWorkbench>();
@@ -94,6 +95,16 @@ export namespace commands {
}
}
+export namespace logger {
+
+ /**
+ * {@linkcode IWorkbench.logger IWorkbench.logger.log}
+ */
+ export function log(level: LogLevel, message: string) {
+ workbenchPromise.p.then(workbench => workbench.logger.log(level, message));
+ }
+}
+
export namespace env {
/**
diff --git a/src/vs/workbench/browser/web.main.ts b/src/vs/workbench/browser/web.main.ts
index 34a5e181dd9..b8dd198abc8 100644
--- a/src/vs/workbench/browser/web.main.ts
+++ b/src/vs/workbench/browser/web.main.ts
@@ -50,7 +50,7 @@ import { UserDataSyncStoreManagementService } from 'vs/platform/userDataSync/com
import { IUserDataSyncStoreManagementService } from 'vs/platform/userDataSync/common/userDataSync';
import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle';
import { Action2, MenuId, registerAction2 } from 'vs/platform/actions/common/actions';
-import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
+import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { localize } from 'vs/nls';
import { CATEGORIES } from 'vs/workbench/common/actions';
import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
@@ -71,6 +71,8 @@ import { IWorkspace } from 'vs/workbench/services/host/browser/browserHostServic
import { WebFileSystemAccess } from 'vs/platform/files/browser/webFileSystemAccess';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IProgressService } from 'vs/platform/progress/common/progress';
+import { DelayedLogChannel } from 'vs/workbench/services/output/common/delayedLogChannel';
+import { dirname, joinPath } from 'vs/base/common/resources';
export class BrowserMain extends Disposable {
@@ -128,6 +130,10 @@ export class BrowserMain extends Disposable {
const productService = accessor.get(IProductService);
const telemetryService = accessor.get(ITelemetryService);
const progessService = accessor.get(IProgressService);
+ const environmentService = accessor.get(IBrowserWorkbenchEnvironmentService);
+ const instantiationService = accessor.get(IInstantiationService);
+
+ const embedderLogger = instantiationService.createInstance(DelayedLogChannel, 'webEmbedder', productService.embedderIdentifier || localize('vscode.dev', "vscode.dev"), joinPath(dirname(environmentService.logFile), `webEmbedder.log`));
return {
commands: {
@@ -147,6 +153,11 @@ export class BrowserMain extends Disposable {
return openerService.open(uri, {});
}
},
+ logger: {
+ log: (level, message) => {
+ embedderLogger.log(level, message);
+ }
+ },
window: {
withProgress: (options, task) => progessService.withProgress(options, task)
},
@@ -334,6 +345,7 @@ export class BrowserMain extends Disposable {
} else {
fileService.registerProvider(logsPath.scheme, new InMemoryFileSystemProvider());
}
+
logService.logger = new MultiplexLogService(coalesce([
new ConsoleLogger(logService.getLevel()),
new FileLogger('window', environmentService.logFile, logService.getLevel(), false, fileService),
diff --git a/src/vs/workbench/services/output/common/delayedLogChannel.ts b/src/vs/workbench/services/output/common/delayedLogChannel.ts
new file mode 100644
index 00000000000..f0fc686c3b8
--- /dev/null
+++ b/src/vs/workbench/services/output/common/delayedLogChannel.ts
@@ -0,0 +1,33 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import { ILogger, ILoggerService, ILogService, log, LogLevel } from 'vs/platform/log/common/log';
+import { registerLogChannel } from 'vs/workbench/services/output/common/output';
+import { URI } from 'vs/base/common/uri';
+import { IFileService } from 'vs/platform/files/common/files';
+
+export class DelayedLogChannel {
+
+ private readonly logger: ILogger;
+
+ constructor(
+ private readonly id: string, private readonly name: string, private readonly file: URI,
+ @ILoggerService loggerService: ILoggerService,
+ @IFileService private readonly fileService: IFileService,
+ @ILogService private readonly logService: ILogService,
+ ) {
+ this.logger = loggerService.createLogger(file, { name });
+ }
+
+ private registerLogChannelPromise: Promise<void> | undefined;
+ log(level: LogLevel, message: string): void {
+ if (!this.registerLogChannelPromise) {
+ // Register log channel only when logging is actually attempted
+ this.registerLogChannelPromise = registerLogChannel(this.id, this.name, this.file, this.fileService, this.logService);
+ }
+ log(this.logger, level, message);
+ }
+
+}
diff --git a/src/vs/workbench/workbench.web.main.ts b/src/vs/workbench/workbench.web.main.ts
index 925c0010a0b..7cc89fe419b 100644
--- a/src/vs/workbench/workbench.web.main.ts
+++ b/src/vs/workbench/workbench.web.main.ts
@@ -169,7 +169,7 @@ import 'vs/workbench/contrib/offline/browser/offline.contribution';
//
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-import { create, commands, env, window } from 'vs/workbench/browser/web.factory';
+import { create, commands, env, window, logger } from 'vs/workbench/browser/web.factory';
import { IWorkbench, ICommand, ICommonTelemetryPropertiesResolver, IDefaultEditor, IDefaultLayout, IDefaultView, IDevelopmentOptions, IExternalUriResolver, IExternalURLOpener, IHomeIndicator, IInitialColorTheme, IPosition, IProductQualityChangeHandler, IRange, IResourceUriProvider, ISettingsSyncOptions, IShowPortCandidate, ITunnel, ITunnelFactory, ITunnelOptions, ITunnelProvider, IWelcomeBanner, IWelcomeBannerAction, IWindowIndicator, IWorkbenchConstructionOptions, Menu } from 'vs/workbench/browser/web.api';
import { UriComponents, URI } from 'vs/base/common/uri';
import { IWebSocketFactory, IWebSocket } from 'vs/platform/remote/browser/browserSocketFactory';
@@ -250,6 +250,9 @@ export {
commands,
Menu,
+ // Logger
+ logger,
+
// Window
window,