Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
sandy081 committed Jan 23, 2018
1 parent de24732 commit b0cd8f8
Showing 1 changed file with 84 additions and 41 deletions.
125 changes: 84 additions & 41 deletions src/vs/platform/log/common/log.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@

import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { createDecorator as createServiceDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IDisposable } from 'vs/base/common/lifecycle';
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<ILogService>('logService');

Expand All @@ -25,6 +27,7 @@ export enum LogLevel {
export interface ILogService extends IDisposable {
_serviceBrand: any;

onDidChangeLogLevel: Event<LogLevel>;
setLevel(level: LogLevel): void;
getLevel(): LogLevel;
trace(message: string, ...args: any[]): void;
Expand All @@ -35,27 +38,37 @@ export interface ILogService extends IDisposable {
critical(message: string | Error, ...args: any[]): void;
}

export class ConsoleLogMainService implements ILogService {
export abstract class AbstractLogService extends Disposable {

_serviceBrand: any;
private level: LogLevel = LogLevel.Error;
private useColors: boolean;

constructor( @IEnvironmentService environmentService: IEnvironmentService) {
this.setLevel(environmentService.logLevel);
this.useColors = !isWindows;
}
private readonly _onDidChangeLogLevel: Emitter<LogLevel> = this._register(new Emitter<LogLevel>());
readonly onDidChangeLogLevel: Event<LogLevel> = this._onDidChangeLogLevel.event;

setLevel(level: LogLevel): void {
this.level = level;
if (this.level !== level) {
this.level = level;
this._onDidChangeLogLevel.fire(this.level);
}
}

getLevel(): LogLevel {
return this.level;
}
}

export class ConsoleLogMainService extends AbstractLogService implements ILogService {

_serviceBrand: any;
private useColors: boolean;

constructor( @IEnvironmentService environmentService: IEnvironmentService) {
super();
this.setLevel(environmentService.logLevel);
this.useColors = !isWindows;
}

trace(message: string, ...args: any[]): void {
if (this.level <= LogLevel.Trace) {
if (this.getLevel() <= LogLevel.Trace) {
if (this.useColors) {
console.log(`\x1b[90m[main ${new Date().toLocaleTimeString()}]\x1b[0m`, message, ...args);
} else {
Expand All @@ -65,7 +78,7 @@ export class ConsoleLogMainService implements ILogService {
}

debug(message: string, ...args: any[]): void {
if (this.level <= LogLevel.Debug) {
if (this.getLevel() <= LogLevel.Debug) {
if (this.useColors) {
console.log(`\x1b[90m[main ${new Date().toLocaleTimeString()}]\x1b[0m`, message, ...args);
} else {
Expand All @@ -75,7 +88,7 @@ export class ConsoleLogMainService implements ILogService {
}

info(message: string, ...args: any[]): void {
if (this.level <= LogLevel.Info) {
if (this.getLevel() <= LogLevel.Info) {
if (this.useColors) {
console.log(`\x1b[90m[main ${new Date().toLocaleTimeString()}]\x1b[0m`, message, ...args);
} else {
Expand All @@ -85,7 +98,7 @@ export class ConsoleLogMainService implements ILogService {
}

warn(message: string | Error, ...args: any[]): void {
if (this.level <= LogLevel.Warning) {
if (this.getLevel() <= LogLevel.Warning) {
if (this.useColors) {
console.warn(`\x1b[93m[main ${new Date().toLocaleTimeString()}]\x1b[0m`, message, ...args);
} else {
Expand All @@ -95,7 +108,7 @@ export class ConsoleLogMainService implements ILogService {
}

error(message: string, ...args: any[]): void {
if (this.level <= LogLevel.Error) {
if (this.getLevel() <= LogLevel.Error) {
if (this.useColors) {
console.error(`\x1b[91m[main ${new Date().toLocaleTimeString()}]\x1b[0m`, message, ...args);
} else {
Expand All @@ -105,7 +118,7 @@ export class ConsoleLogMainService implements ILogService {
}

critical(message: string, ...args: any[]): void {
if (this.level <= LogLevel.Critical) {
if (this.getLevel() <= LogLevel.Critical) {
if (this.useColors) {
console.error(`\x1b[90m[main ${new Date().toLocaleTimeString()}]\x1b[0m`, message, ...args);
} else {
Expand All @@ -119,78 +132,66 @@ export class ConsoleLogMainService implements ILogService {
}
}

export class ConsoleLogService implements ILogService {
export class ConsoleLogService extends AbstractLogService implements ILogService {

_serviceBrand: any;
private level: LogLevel = LogLevel.Error;

constructor( @IEnvironmentService environmentService: IEnvironmentService) {
super();
this.setLevel(environmentService.logLevel);
}

setLevel(level: LogLevel): void {
this.level = level;
}

getLevel(): LogLevel {
return this.level;
}

trace(message: string, ...args: any[]): void {
if (this.level <= LogLevel.Trace) {
if (this.getLevel() <= LogLevel.Trace) {
console.log('%cTRACE', 'color: #888', message, ...args);
}
}

debug(message: string, ...args: any[]): void {
if (this.level <= LogLevel.Debug) {
if (this.getLevel() <= LogLevel.Debug) {
console.log('%cDEBUG', 'background: #eee; color: #888', message, ...args);
}
}

info(message: string, ...args: any[]): void {
if (this.level <= LogLevel.Info) {
if (this.getLevel() <= LogLevel.Info) {
console.log('%c INFO', 'color: #33f', message, ...args);
}
}

warn(message: string | Error, ...args: any[]): void {
if (this.level <= LogLevel.Warning) {
if (this.getLevel() <= LogLevel.Warning) {
console.log('%c WARN', 'color: #993', message, ...args);
}
}

error(message: string, ...args: any[]): void {
if (this.level <= LogLevel.Error) {
if (this.getLevel() <= LogLevel.Error) {
console.log('%c ERR', 'color: #f33', message, ...args);
}
}

critical(message: string, ...args: any[]): void {
if (this.level <= LogLevel.Critical) {
if (this.getLevel() <= LogLevel.Critical) {
console.log('%cCRITI', 'background: #f33; color: white', message, ...args);
}
}

dispose(): void { }
}

export class MultiplexLogService implements ILogService {
export class MultiplexLogService extends AbstractLogService implements ILogService {
_serviceBrand: any;

constructor(private logServices: ILogService[]) { }
constructor(private logServices: ILogService[]) {
super();
}

setLevel(level: LogLevel): void {
for (const logService of this.logServices) {
logService.setLevel(level);
}
}

getLevel(): LogLevel {
for (const logService of this.logServices) {
return logService.getLevel();
}
return LogLevel.Info;
super.setLevel(level);
}

trace(message: string, ...args: any[]): void {
Expand Down Expand Up @@ -236,8 +237,50 @@ export class MultiplexLogService implements ILogService {
}
}

export class FollowerLogService extends AbstractLogService implements ILogService {
_serviceBrand: any;

constructor(private client: LogLevelChannelClient, private logService: ILogService) {
super();
this._register(client.onDidChangeLogLevel(level => logService.setLevel(level)));
}

setLevel(level: LogLevel): void {
this.client.setLogLevel(level);
}

trace(message: string, ...args: any[]): void {
this.logService.trace(message, ...args);
}

debug(message: string, ...args: any[]): void {
this.logService.debug(message, ...args);
}

info(message: string, ...args: any[]): void {
this.logService.info(message, ...args);
}

warn(message: string, ...args: any[]): void {
this.logService.warn(message, ...args);
}

error(message: string | Error, ...args: any[]): void {
this.logService.error(message, ...args);
}

critical(message: string | Error, ...args: any[]): void {
this.logService.critical(message, ...args);
}

dispose(): void {
this.logService.dispose();
}
}

export class NullLogService implements ILogService {
_serviceBrand: any;
readonly onDidChangeLogLevel: Event<LogLevel> = new Emitter<LogLevel>().event;
setLevel(level: LogLevel): void { }
getLevel(): LogLevel { return LogLevel.Info; }
trace(message: string, ...args: any[]): void { }
Expand Down

0 comments on commit b0cd8f8

Please sign in to comment.