diff --git a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts index 17fdc47c3e7..08d4961b251 100644 --- a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts +++ b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts @@ -39,7 +39,7 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { createSharedProcessContributions } from 'vs/code/electron-browser/sharedProcess/contrib/contributions'; import { createSpdLogService } from 'vs/platform/log/node/spdlogService'; import { ILogService, FollowerLogService } from 'vs/platform/log/common/log'; -import { LogLevelChannelClient } from 'vs/platform/log/common/logIpc'; +import { LogLevelSetterChannelClient } from 'vs/platform/log/common/logIpc'; export interface ISharedProcessConfiguration { readonly machineId: string; @@ -82,7 +82,7 @@ function main(server: Server, initData: ISharedProcessInitData, configuration: I const services = new ServiceCollection(); const environmentService = new EnvironmentService(initData.args, process.execPath); - const logLevelClient = new LogLevelChannelClient(server.getChannel('loglevel', { route: () => 'main' })); + const logLevelClient = new LogLevelSetterChannelClient(server.getChannel('loglevel', { route: () => 'main' })); const logService = new FollowerLogService(logLevelClient, createSpdLogService('sharedprocess', environmentService)); process.once('exit', () => logService.dispose()); diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts index eec6c2bae9b..c23a0587ca0 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -57,7 +57,7 @@ import { DarwinUpdateService } from 'vs/platform/update/electron-main/updateServ import { IIssueService } from 'vs/platform/issue/common/issue'; import { IssueChannel } from 'vs/platform/issue/common/issueIpc'; import { IssueService } from 'vs/platform/issue/electron-main/issueService'; -import { LogLevelChannel } from 'vs/platform/log/common/logIpc'; +import { LogLevelSetterChannel } from 'vs/platform/log/common/logIpc'; export class CodeApplication { @@ -380,7 +380,7 @@ export class CodeApplication { this.sharedProcessClient.done(client => client.registerChannel('windows', windowsChannel)); // Log level management - const logLevelChannel = new LogLevelChannel(accessor.get(ILogService)); + const logLevelChannel = new LogLevelSetterChannel(accessor.get(ILogService)); this.electronIpcServer.registerChannel('loglevel', logLevelChannel); this.sharedProcessClient.done(client => client.registerChannel('loglevel', logLevelChannel)); diff --git a/src/vs/platform/log/common/log.ts b/src/vs/platform/log/common/log.ts index f7019d95418..615070982ec 100644 --- a/src/vs/platform/log/common/log.ts +++ b/src/vs/platform/log/common/log.ts @@ -10,7 +10,6 @@ import { createDecorator as createServiceDecorator } from 'vs/platform/instantia import { IDisposable, Disposable } from 'vs/base/common/lifecycle'; import { isWindows } from 'vs/base/common/platform'; import Event, { Emitter } from 'vs/base/common/event'; -import { LogLevelChannelClient } from 'vs/platform/log/common/logIpc'; export const ILogService = createServiceDecorator('logService'); @@ -24,11 +23,14 @@ export enum LogLevel { Off } -export interface ILogService extends IDisposable { - _serviceBrand: any; - +export interface ILogLevelSetter { onDidChangeLogLevel: Event; setLevel(level: LogLevel): void; +} + +export interface ILogService extends ILogLevelSetter, IDisposable { + _serviceBrand: any; + getLevel(): LogLevel; trace(message: string, ...args: any[]): void; debug(message: string, ...args: any[]): void; @@ -237,16 +239,24 @@ export class MultiplexLogService extends AbstractLogService implements ILogServi } } -export class FollowerLogService extends AbstractLogService implements ILogService { +export class FollowerLogService extends Disposable implements ILogService { _serviceBrand: any; - constructor(private client: LogLevelChannelClient, private logService: ILogService) { + constructor(private master: ILogLevelSetter, private logService: ILogService) { super(); - this._register(client.onDidChangeLogLevel(level => logService.setLevel(level))); + this._register(master.onDidChangeLogLevel(level => logService.setLevel(level))); + } + + get onDidChangeLogLevel(): Event { + return this.logService.onDidChangeLogLevel; } setLevel(level: LogLevel): void { - this.client.setLogLevel(level); + this.master.setLevel(level); + } + + getLevel(): LogLevel { + return this.logService.getLevel(); } trace(message: string, ...args: any[]): void { diff --git a/src/vs/platform/log/common/logIpc.ts b/src/vs/platform/log/common/logIpc.ts index 9eb0764c54e..e8c10a8416d 100644 --- a/src/vs/platform/log/common/logIpc.ts +++ b/src/vs/platform/log/common/logIpc.ts @@ -5,15 +5,15 @@ import { IChannel, eventToCall, eventFromCall } from 'vs/base/parts/ipc/common/ipc'; import { TPromise } from 'vs/base/common/winjs.base'; -import { LogLevel, ILogService } from 'vs/platform/log/common/log'; +import { LogLevel, ILogService, ILogLevelSetter } from 'vs/platform/log/common/log'; import Event, { buffer } from 'vs/base/common/event'; -export interface ILogLevelManagementChannel extends IChannel { +export interface ILogLevelSetterChannel extends IChannel { call(command: 'event:onDidChangeLogLevel'): TPromise; - call(command: 'setLogLevel', logLevel: LogLevel): TPromise; + call(command: 'setLevel', logLevel: LogLevel): TPromise; } -export class LogLevelChannel implements ILogLevelManagementChannel { +export class LogLevelSetterChannel implements ILogLevelSetterChannel { onDidChangeLogLevel: Event; @@ -24,20 +24,20 @@ export class LogLevelChannel implements ILogLevelManagementChannel { call(command: string, arg?: any): TPromise { switch (command) { case 'event:onDidChangeLogLevel': return eventToCall(this.onDidChangeLogLevel); - case 'setLogLevel': this.service.setLevel(arg); return TPromise.as(null); + case 'setLevel': this.service.setLevel(arg); return TPromise.as(null); } return undefined; } } -export class LogLevelChannelClient { +export class LogLevelSetterChannelClient implements ILogLevelSetter { - constructor(private channel: ILogLevelManagementChannel) { } + constructor(private channel: ILogLevelSetterChannel) { } private _onDidChangeLogLevel = eventFromCall(this.channel, 'event:onDidChangeLogLevel'); get onDidChangeLogLevel(): Event { return this._onDidChangeLogLevel; } - setLogLevel(level: LogLevel): TPromise { - return this.channel.call('setLogLevel', level); + setLevel(level: LogLevel): TPromise { + return this.channel.call('setLevel', level); } } \ No newline at end of file diff --git a/src/vs/workbench/electron-browser/main.ts b/src/vs/workbench/electron-browser/main.ts index f40edbae3fc..315865aef12 100644 --- a/src/vs/workbench/electron-browser/main.ts +++ b/src/vs/workbench/electron-browser/main.ts @@ -46,7 +46,7 @@ import fs = require('fs'); import { ConsoleLogService, MultiplexLogService, ILogService, FollowerLogService } from 'vs/platform/log/common/log'; import { IssueChannelClient } from 'vs/platform/issue/common/issueIpc'; import { IIssueService } from 'vs/platform/issue/common/issue'; -import { LogLevelChannelClient } from 'vs/platform/log/common/logIpc'; +import { LogLevelSetterChannelClient } from 'vs/platform/log/common/logIpc'; gracefulFs.gracefulify(fs); // enable gracefulFs export function startup(configuration: IWindowConfiguration): TPromise { @@ -202,7 +202,7 @@ function createLogService(mainProcessClient: ElectronIPCClient, configuration: I const spdlogService = createSpdLogService(`renderer${configuration.windowId}`, environmentService); const consoleLogService = new ConsoleLogService(environmentService); const logService = new MultiplexLogService([consoleLogService, spdlogService]); - const logLevelClient = new LogLevelChannelClient(mainProcessClient.getChannel('loglevel')); + const logLevelClient = new LogLevelSetterChannelClient(mainProcessClient.getChannel('loglevel')); return new FollowerLogService(logLevelClient, logService); }