1- import * as fs from 'fs' ;
2-
3- export enum LoggerMessageType {
4- Log ,
5- Info ,
6- Warning ,
7- Error
1+ enum LogLevel {
2+ Verbose = 0 ,
3+ Log = 1 ,
4+ Warn = 2 ,
5+ Error = 3 ,
6+ Stop = 4 ,
87}
98
10- export interface LoggerMessageEventArgs {
11- message : string ,
12- type : LoggerMessageType
9+ interface ILogger {
10+ log ( msg : string , level ?: LogLevel ) : void ;
1311}
1412
15- export type LoggerHandler = ( ( args : LoggerMessageEventArgs ) => void ) ;
16- type TaggedLoggerHandler = { handler : LoggerHandler , tags : string [ ] } ;
17-
18- /**
19- * The logger is a singleton.
20- */
21- export class Logger {
22- private _handlers : TaggedLoggerHandler [ ] ;
23-
24- constructor ( ) {
25- this . _handlers = [ ] ;
26- }
27-
28- private handleMessage ( message : string , type : LoggerMessageType = LoggerMessageType . Log , tag : string = null ) {
29- for ( let handler of this . _handlers ) {
30- if ( ! handler . tags || handler . tags . length == 0 || handler . tags . indexOf ( tag ) > - 1 ) {
31- handler . handler ( { message : message , type : type } ) ;
32- }
33- }
34- }
35-
36- public log ( message : string , tag : string = null ) : void {
37- this . handleMessage ( message , LoggerMessageType . Log , tag ) ;
38- }
39-
40- public info ( message : string , tag : string = null ) : void {
41- this . handleMessage ( message , LoggerMessageType . Info , tag ) ;
42- }
43-
44- public warn ( message : string , tag : string = null ) : void {
45- this . handleMessage ( message , LoggerMessageType . Warning , tag ) ;
46- }
47-
48- public error ( message : string , tag : string = null ) : void {
49- this . handleMessage ( message , LoggerMessageType . Error , tag ) ;
50- }
51-
52- public addHandler ( handler : LoggerHandler , tags : string [ ] = null ) {
53- tags = tags || [ ] ;
54- this . _handlers . push ( { handler : handler , tags : tags } ) ;
55- }
56-
57- /**
58- * Removes all occurrence of this handler, ignoring the associated tags
59- */
60- public removeHandler ( handlerToRemove : LoggerHandler ) {
61- let i = this . _handlers . length ;
62- while ( i -- ) {
63- if ( this . _handlers [ i ] . handler == handlerToRemove ) {
64- this . _handlers . splice ( i , 1 ) ;
65- }
66- }
67- }
68- }
69-
70- export namespace Tags {
71- export const FrontendMessage : string = "LoggerTag.FrontendMessage" ;
72- }
73-
74- export namespace Handlers {
75- export function stdStreamsHandler ( args : LoggerMessageEventArgs ) {
76- var message = args . message . replace ( / \n $ / , "" ) ;
77- switch ( args . type ) {
78- case LoggerMessageType . Log :
79- console . log ( message ) ;
80- break ;
81- case LoggerMessageType . Info :
82- console . info ( message ) ;
83- break ;
84- case LoggerMessageType . Warning :
85- console . warn ( message ) ;
86- break ;
87- case LoggerMessageType . Error :
88- console . error ( message ) ;
89- break ;
90- }
91- } ;
92-
93- export function createStreamHandler ( stream : fs . WriteStream , encoding : string = 'utf8' ) : LoggerHandler {
94- let isStreamClosed = false ;
95- stream . on ( 'close' , ( ) => { isStreamClosed = true ; } ) ;
96- return ( args : LoggerMessageEventArgs ) => {
97- if ( stream && ! isStreamClosed ) {
98- stream . write ( args . message , encoding ) ;
99- }
100- }
101- }
102- }
13+ export { ILogger , LogLevel }
0 commit comments