From 315cce8314801ba9b25190682fad7fb48e797a9f Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 17 Aug 2018 11:04:35 +0200 Subject: [PATCH] Revert "remove proposed Logger-api, #43275" This reverts commit 1c72ab243c302f2d69551077c1be1d13f04101d8. --- src/vs/vscode.proposed.d.ts | 16 ++++++ src/vs/workbench/api/node/extHost.api.impl.ts | 5 +- .../api/node/extHostExtensionActivator.ts | 2 + .../api/node/extHostExtensionService.ts | 4 ++ .../workbench/api/node/extHostLogService.ts | 50 +++++++++++++++++++ 5 files changed, 73 insertions(+), 4 deletions(-) diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 7c10f6b6b56..3de4a7af9dd 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -434,7 +434,23 @@ declare module 'vscode' { Off = 7 } + /** + * A logger for writing to an extension's log file, and accessing its dedicated log directory. + */ + export interface Logger { + trace(message: string, ...args: any[]): void; + debug(message: string, ...args: any[]): void; + info(message: string, ...args: any[]): void; + warn(message: string, ...args: any[]): void; + error(message: string | Error, ...args: any[]): void; + critical(message: string | Error, ...args: any[]): void; + } + export interface ExtensionContext { + /** + * This extension's logger + */ + logger: Logger; /** * Path where an extension can write log files. diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index a8afbaabb36..ea64898c5b1 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -227,10 +227,7 @@ export function createApiFactory( get language() { return platform.language; }, get appName() { return product.nameLong; }, get appRoot() { return initData.environment.appRoot; }, - get logLevel() { - checkProposedApiEnabled(extension); - return extHostLogService.getLevel(); - } + get logLevel() { return extHostLogService.getLevel(); } }); // namespace: extensions diff --git a/src/vs/workbench/api/node/extHostExtensionActivator.ts b/src/vs/workbench/api/node/extHostExtensionActivator.ts index b392d0182f1..cbd8a70d649 100644 --- a/src/vs/workbench/api/node/extHostExtensionActivator.ts +++ b/src/vs/workbench/api/node/extHostExtensionActivator.ts @@ -10,6 +10,7 @@ import Severity from 'vs/base/common/severity'; import { TPromise } from 'vs/base/common/winjs.base'; import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/node/extensionDescriptionRegistry'; import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; +import { ExtHostLogger } from 'vs/workbench/api/node/extHostLogService'; const hasOwnProperty = Object.hasOwnProperty; const NO_OP_VOID_PROMISE = TPromise.wrap(void 0); @@ -26,6 +27,7 @@ export interface IExtensionContext { extensionPath: string; storagePath: string; asAbsolutePath(relativePath: string): string; + logger: ExtHostLogger; readonly logDirectory: string; readonly logPath: string; } diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index 06c52263022..f29e288412b 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -361,6 +361,10 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { get extensionPath() { return extensionDescription.extensionLocation.fsPath; }, storagePath: this._storagePath.value(extensionDescription), asAbsolutePath: (relativePath: string) => { return join(extensionDescription.extensionLocation.fsPath, relativePath); }, + get logger() { + checkProposedApiEnabled(extensionDescription); + return that._extHostLogService.getExtLogger(extensionDescription.id); + }, get logDirectory() { console.warn(`this PROPOSED API has been RENAMED to 'logPath'`); checkProposedApiEnabled(extensionDescription); diff --git a/src/vs/workbench/api/node/extHostLogService.ts b/src/vs/workbench/api/node/extHostLogService.ts index 31b0113188f..6708690a2f4 100644 --- a/src/vs/workbench/api/node/extHostLogService.ts +++ b/src/vs/workbench/api/node/extHostLogService.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; +import * as vscode from 'vscode'; import { join } from 'vs/base/common/paths'; import { LogLevel } from 'vs/workbench/api/node/extHostTypes'; import { ILogService, DelegatedLogService } from 'vs/platform/log/common/log'; @@ -13,6 +14,8 @@ import { ExtHostLogServiceShape } from 'vs/workbench/api/node/extHost.protocol'; export class ExtHostLogService extends DelegatedLogService implements ILogService, ExtHostLogServiceShape { + private _loggers: Map = new Map(); + constructor( private _windowId: number, logLevel: LogLevel, @@ -25,7 +28,54 @@ export class ExtHostLogService extends DelegatedLogService implements ILogServic this.setLevel(level); } + getExtLogger(extensionID: string): ExtHostLogger { + let logger = this._loggers.get(extensionID); + if (!logger) { + logger = this.createLogger(extensionID); + this._loggers.set(extensionID, logger); + } + return logger; + } + getLogDirectory(extensionID: string): string { return join(this._logsPath, `${extensionID}_${this._windowId}`); } + + private createLogger(extensionID: string): ExtHostLogger { + const logsDirPath = this.getLogDirectory(extensionID); + const logService = createSpdLogService(extensionID, this.getLevel(), logsDirPath); + this._register(this.onDidChangeLogLevel(level => logService.setLevel(level))); + return new ExtHostLogger(logService); + } +} + +export class ExtHostLogger implements vscode.Logger { + + constructor( + private readonly _logService: ILogService + ) { } + + trace(message: string, ...args: any[]): void { + return this._logService.trace(message, ...args); + } + + debug(message: string, ...args: any[]): void { + return this._logService.debug(message, ...args); + } + + info(message: string, ...args: any[]): void { + return this._logService.info(message, ...args); + } + + warn(message: string, ...args: any[]): void { + return this._logService.warn(message, ...args); + } + + error(message: string | Error, ...args: any[]): void { + return this._logService.error(message, ...args); + } + + critical(message: string | Error, ...args: any[]): void { + return this._logService.critical(message, ...args); + } } -- GitLab