@@ -8,47 +8,59 @@ import * as path from 'path';
88import * as vscode from 'vscode' ;
99import { TPromise } from 'vs/base/common/winjs.base' ;
1010import { mkdirp , dirExists } from 'vs/base/node/pfs' ;
11- import Event , { Emitter } from 'vs/base/common/event' ;
11+ import Event from 'vs/base/common/event' ;
1212import { LogLevel } from 'vs/workbench/api/node/extHostTypes' ;
1313import { ILogService } from 'vs/platform/log/common/log' ;
1414import { createSpdLogService } from 'vs/platform/log/node/spdlogService' ;
1515import { IEnvironmentService } from 'vs/platform/environment/common/environment' ;
1616import { memoize } from 'vs/base/common/decorators' ;
17+ import { ExtHostLogServiceShape } from 'vs/workbench/api/node/extHost.protocol' ;
18+ import { Disposable } from 'vs/base/common/lifecycle' ;
1719
18- export class ExtHostLogService {
20+ export class ExtHostLogService extends Disposable implements ExtHostLogServiceShape {
1921 private _loggers : Map < string , ExtHostLogger > = new Map ( ) ;
2022
21- constructor ( private _environmentService : IEnvironmentService ) {
23+ constructor (
24+ private _environmentService : IEnvironmentService ,
25+ private _logService : ILogService
26+ ) {
27+ super ( ) ;
28+ }
29+
30+ $setLogLevel ( level : LogLevel ) {
31+ this . _logService . setLevel ( level ) ;
2232 }
2333
2434 getExtLogger ( extensionID : string ) : ExtHostLogger {
25- if ( ! this . _loggers . has ( extensionID ) ) {
26- const logService = createSpdLogService ( extensionID , this . _environmentService , extensionID ) ;
27- const logsDirPath = path . join ( this . _environmentService . logsPath , extensionID ) ;
28- this . _loggers . set ( extensionID , new ExtHostLogger ( logService , logsDirPath ) ) ;
35+ let logger = this . _loggers . get ( extensionID ) ;
36+ if ( ! logger ) {
37+ logger = this . createLogger ( extensionID ) ;
38+ this . _loggers . set ( extensionID , logger ) ;
2939 }
40+ return logger ;
41+ }
3042
31- return this . _loggers . get ( extensionID ) ;
43+ private createLogger ( extensionID : string ) : ExtHostLogger {
44+ const logService = createSpdLogService ( extensionID , this . _environmentService , extensionID ) ;
45+ const logsDirPath = path . join ( this . _environmentService . logsPath , extensionID ) ;
46+ this . _register ( this . _logService . onDidChangeLogLevel ( level => logService . setLevel ( level ) ) ) ;
47+ return new ExtHostLogger ( logService , logsDirPath ) ;
3248 }
3349}
3450
3551export class ExtHostLogger implements vscode . Logger {
36- private _currentLevel : LogLevel ;
37- private _onDidChangeLogLevel : Emitter < LogLevel > ;
3852
3953 constructor (
4054 private readonly _logService : ILogService ,
4155 private readonly _logDirectory : string
4256 ) {
43- this . _currentLevel = this . _logService . getLevel ( ) ;
44- this . _onDidChangeLogLevel = new Emitter < LogLevel > ( ) ;
45- this . onDidChangeLogLevel = this . _onDidChangeLogLevel . event ;
4657 }
4758
48- // TODO
49- readonly onDidChangeLogLevel : Event < LogLevel > ;
59+ get onDidChangeLogLevel ( ) : Event < LogLevel > {
60+ return this . _logService . onDidChangeLogLevel ;
61+ }
5062
51- get currentLevel ( ) : LogLevel { return this . _currentLevel ; }
63+ get currentLevel ( ) : LogLevel { return this . _logService . getLevel ( ) ; }
5264
5365 @memoize
5466 get logDirectory ( ) : TPromise < string > {
0 commit comments