diff --git a/src/vs/code/browser/workbench/workbench.ts b/src/vs/code/browser/workbench/workbench.ts index 0ef8b9dc81419b53b27cf111fb206d72ba56bada..cd6cde15786fc8106184b1e3c1d1cdee0cbcd76b 100644 --- a/src/vs/code/browser/workbench/workbench.ts +++ b/src/vs/code/browser/workbench/workbench.ts @@ -17,6 +17,7 @@ import { isStandalone } from 'vs/base/browser/browser'; import { localize } from 'vs/nls'; import { Schemas } from 'vs/base/common/network'; import product from 'vs/platform/product/common/product'; +import { getLogLevel, LogLevel } from 'vs/platform/log/common/log'; function doCreateUri(path: string, queryValues: Map): URI { let query: string | undefined = undefined; @@ -416,7 +417,8 @@ class WindowIndicator implements IWindowIndicator { // Find workspace to open and payload let foundWorkspace = false; let workspace: IWorkspace; - let payload = Object.create(null); + let payloadRaw = Object.create(null); + let payloadMap = new Map(); const query = new URL(document.location.href).searchParams; query.forEach((value, key) => { @@ -443,7 +445,10 @@ class WindowIndicator implements IWindowIndicator { // Payload case WorkspaceProvider.QUERY_PARAM_PAYLOAD: try { - payload = JSON.parse(value); + payloadRaw = JSON.parse(value); + if (Array.isArray(payloadRaw)) { + payloadMap = new Map(payloadRaw); + } } catch (error) { console.error(error); // possible invalid JSON } @@ -463,7 +468,7 @@ class WindowIndicator implements IWindowIndicator { } // Workspace Provider - const workspaceProvider = new WorkspaceProvider(workspace, payload); + const workspaceProvider = new WorkspaceProvider(workspace, payloadRaw); // Home Indicator const homeIndicator: IHomeIndicator = { @@ -511,6 +516,13 @@ class WindowIndicator implements IWindowIndicator { } } : undefined; + // log level + let logLevel: LogLevel | undefined = undefined; + const logLevelPayload = payloadMap.get('logLevel'); + if (logLevelPayload) { + logLevel = getLogLevel(logLevelPayload); + } + // Finally create workbench create(document.body, { ...config, @@ -520,6 +532,7 @@ class WindowIndicator implements IWindowIndicator { productQualityChangeHandler, workspaceProvider, urlCallbackProvider: new PollingURLCallbackProvider(), - credentialsProvider: new LocalStorageCredentialsProvider() + credentialsProvider: new LocalStorageCredentialsProvider(), + logLevel }); })(); diff --git a/src/vs/platform/log/common/log.ts b/src/vs/platform/log/common/log.ts index add6b7666af489d24a6f4be4da4fdffec924108d..c3702745b82c89461b690173957ca7b11880299c 100644 --- a/src/vs/platform/log/common/log.ts +++ b/src/vs/platform/log/common/log.ts @@ -414,12 +414,23 @@ export class NullLogService implements ILogService { flush(): void { } } -export function getLogLevel(environmentService: IEnvironmentService): LogLevel { - if (environmentService.verbose) { - return LogLevel.Trace; +export function getLogLevel(environmentService: IEnvironmentService): LogLevel; +export function getLogLevel(logLevel: string): LogLevel; +export function getLogLevel(arg: IEnvironmentService | string): LogLevel { + let rawLogLevel: string | undefined = undefined; + + if (typeof arg !== 'string') { + if (arg.verbose) { + return LogLevel.Trace; + } + + rawLogLevel = arg.logLevel; + } else { + rawLogLevel = arg; } - if (typeof environmentService.logLevel === 'string') { - const logLevel = environmentService.logLevel.toLowerCase(); + + if (typeof rawLogLevel === 'string') { + const logLevel = rawLogLevel.toLowerCase(); switch (logLevel) { case 'trace': return LogLevel.Trace;