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 ,
8
7
}
9
8
10
- export interface LoggerMessageEventArgs {
11
- message : string ,
12
- type : LoggerMessageType
9
+ interface ILogger {
10
+ log ( msg : string , level ?: LogLevel ) : void ;
13
11
}
14
12
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