From 27de866193be11c14f21323f5630782c59c7cc11 Mon Sep 17 00:00:00 2001 From: Eugenio Romano Date: Tue, 13 Mar 2018 15:48:19 +0000 Subject: [PATCH] [ADF-2477] message bus in log service (#3063) * add message bus in log service to allow third pat integrations * fix test after review --- docs/log.service.md | 34 +++++++++- lib/core/services/log.service.spec.ts | 12 ++++ lib/core/services/log.service.ts | 93 +++++++++++++++------------ 3 files changed, 96 insertions(+), 43 deletions(-) diff --git a/docs/log.service.md b/docs/log.service.md index f78d4e361b..ca59f2bc6d 100644 --- a/docs/log.service.md +++ b/docs/log.service.md @@ -53,4 +53,36 @@ If you want set for example the log to warning: { "logLevel": "WARN" } -``` \ No newline at end of file +``` + +### Log message bus + +The logservice provide also an Observable ***onMessage*** where you can subscribe and recive all the logs: + +The messagge object recived form the bus is composed: + +```ts +{ + text: "Message log text" + type: "ERROR|DEBUG|INFO|LOG|TRACE|WARN|ASSERT" +} +``` + +## Usage + +```ts +import { LogService } from '@alfresco/adf-core'; + +@Component({...}) +export class AppComponent { + + constructor(logService: LogService, myIntegrationService: MyIntegrationService)) { + + logService.onMessage.subscribe((message) => { + myIntegrationService.send(message.text,message.type); + }); + + } + +} +``` diff --git a/lib/core/services/log.service.spec.ts b/lib/core/services/log.service.spec.ts index ba2462096f..614f74e04d 100644 --- a/lib/core/services/log.service.spec.ts +++ b/lib/core/services/log.service.spec.ts @@ -143,6 +143,18 @@ describe('Log Service', () => { expect(console.error).toHaveBeenCalled(); }); + it('message Observable', (done) => { + appConfigService.config['logLevel'] = 'trace'; + providesLogComponent = TestBed.createComponent(ProvidesLogComponent); + + providesLogComponent.componentInstance.logService.onMessage.subscribe((message) => { + done(); + }); + + providesLogComponent.componentInstance.log(); + + }); + }); @Component({ diff --git a/lib/core/services/log.service.ts b/lib/core/services/log.service.ts index 61179e99f9..177dc770a7 100644 --- a/lib/core/services/log.service.ts +++ b/lib/core/services/log.service.ts @@ -15,16 +15,24 @@ * limitations under the License. */ +/* tslint:disable:no-console */ + import { Injectable } from '@angular/core'; import { AppConfigService } from '../app-config/app-config.service'; import { logLevels, LogLevelsEnum } from '../models/log-levels.model'; +import { Subject } from 'rxjs/Subject'; @Injectable() export class LogService { currentLogLevel: LogLevelsEnum = LogLevelsEnum.TRACE; + onMessage: Subject; + constructor(appConfig: AppConfigService) { + + this.onMessage = new Subject(); + if (appConfig) { let configLevel: string = appConfig.get('logLevel'); @@ -34,82 +42,79 @@ export class LogService { } } - get error(): (message?: any, ...optionalParams: any[]) => any { + error(message?: any, ...optionalParams: any[]) { if (this.currentLogLevel >= LogLevelsEnum.ERROR) { - return console.error.bind(console); + + this.messageBus(message, 'ERROR'); + + console.error(message, ...optionalParams); } - return (message?: any, ...optionalParams: any[]) => { - }; } - get debug(): (message?: any, ...optionalParams: any[]) => any { + debug(message?: any, ...optionalParams: any[]) { if (this.currentLogLevel >= LogLevelsEnum.DEBUG) { - return console.debug.bind(console); + + this.messageBus(message, 'DEBUG'); + + console.debug(message, ...optionalParams); } - return (message?: any, ...optionalParams: any[]) => { - }; } - get info(): (message?: any, ...optionalParams: any[]) => any { + info(message?: any, ...optionalParams: any[]) { if (this.currentLogLevel >= LogLevelsEnum.INFO) { - return console.info.bind(console); + + this.messageBus(message, 'INFO'); + + console.info(message, ...optionalParams); } - return (message?: any, ...optionalParams: any[]) => { - }; } - get log(): (message?: any, ...optionalParams: any[]) => any { + log(message?: any, ...optionalParams: any[]) { if (this.currentLogLevel >= LogLevelsEnum.TRACE) { - return console.log.bind(console); - } - return (message?: any, ...optionalParams: any[]) => { - }; + this.messageBus(message, 'LOG'); + + console.log(message, ...optionalParams); + } } - get trace(): (message?: any, ...optionalParams: any[]) => any { + trace(message?: any, ...optionalParams: any[]) { if (this.currentLogLevel >= LogLevelsEnum.TRACE) { - return console.trace.bind(console); - } - return (message?: any, ...optionalParams: any[]) => { - }; + this.messageBus(message, 'TRACE'); + + console.trace(message, ...optionalParams); + } } - get warn(): (message?: any, ...optionalParams: any[]) => any { + warn(message?: any, ...optionalParams: any[]) { if (this.currentLogLevel >= LogLevelsEnum.WARN) { - return console.warn.bind(console); - } - return (message?: any, ...optionalParams: any[]) => { - }; + this.messageBus(message, 'WARN'); + + console.warn(message, ...optionalParams); + } } - get assert(): (message?: any, ...optionalParams: any[]) => any { + assert(test?: boolean, message?: string, ...optionalParams: any[]) { if (this.currentLogLevel !== LogLevelsEnum.SILENT) { - return console.assert.bind(console); - } - return (message?: any, ...optionalParams: any[]) => { - }; + this.messageBus(message, 'ASSERT'); + + console.assert(test, message, ...optionalParams); + } } - get group(): (message?: any, ...optionalParams: any[]) => any { + group(groupTitle?: string, ...optionalParams: any[]) { if (this.currentLogLevel !== LogLevelsEnum.SILENT) { - return console.group.bind(console); + console.group(groupTitle, ...optionalParams); } - return (message?: any, ...optionalParams: any[]) => { - }; - } - get groupEnd(): (message?: any, ...optionalParams: any[]) => any { + groupEnd() { if (this.currentLogLevel !== LogLevelsEnum.SILENT) { - return console.groupEnd.bind(console); + console.groupEnd(); } - return (message?: any, ...optionalParams: any[]) => { - }; - } getCurrentLogLevel(level: string): LogLevelsEnum { @@ -119,4 +124,8 @@ export class LogService { return referencedLevel ? referencedLevel.level : 5; } + + messageBus(text: string, logLevel: string) { + this.onMessage.next({ text: text, type: logLevel }); + } }