11import { Logger } from './logger' ;
22
3- let globalConsoleStack : Logger [ ] = null ;
4- let originalConsoleDebug : ( message ?: any , ...optionalParams : any [ ] ) => void ;
5- let originalConsoleLog : ( message ?: any , ...optionalParams : any [ ] ) => void ;
6- let originalConsoleWarn : ( message ?: any , ...optionalParams : any [ ] ) => void ;
7- let originalConsoleError : ( message ?: any , ...optionalParams : any [ ] ) => void ;
3+ type ConsoleWriter = ( message ?: any , ...optionalParams : any [ ] ) => void ;
84
5+ let globalConsoleStack : Logger [ ] | null = null ;
6+ let originalConsoleDebug : ConsoleWriter ;
7+ let originalConsoleLog : ConsoleWriter ;
8+ let originalConsoleWarn : ConsoleWriter ;
9+ let originalConsoleError : ConsoleWriter ;
10+
11+
12+ function _push ( logger : Logger ) : Logger {
13+ if ( ! globalConsoleStack ) {
14+ throw new Error ( 'ConsoleLoggerStack must be started before pushing a logger.' ) ;
15+ }
916
10- function _push ( logger : Logger ) {
1117 if ( globalConsoleStack . length == 0 ) {
1218 originalConsoleDebug = ( console as any ) . debug ; // Some environment (node) don't have debug.
1319 originalConsoleLog = console . log ;
1420 originalConsoleWarn = console . warn ;
1521 originalConsoleError = console . error ;
1622
1723 ( console as any ) . debug = ( msg : string , ...args : any [ ] ) => {
18- globalConsoleStack [ globalConsoleStack . length - 1 ] . debug ( msg , { args } ) ;
24+ const logger = ConsoleLoggerStack . top ( ) ;
25+ if ( logger ) {
26+ logger . debug ( msg , { args } ) ;
27+ }
1928 } ;
2029 console . log = ( msg : string , ...args : any [ ] ) => {
21- globalConsoleStack [ globalConsoleStack . length - 1 ] . info ( msg , { args } ) ;
30+ const logger = ConsoleLoggerStack . top ( ) ;
31+ if ( logger ) {
32+ logger . info ( msg , { args } ) ;
33+ }
2234 } ;
2335 console . warn = ( msg : string , ...args : any [ ] ) => {
24- globalConsoleStack [ globalConsoleStack . length - 1 ] . warn ( msg , { args } ) ;
36+ const logger = ConsoleLoggerStack . top ( ) ;
37+ if ( logger ) {
38+ logger . warn ( msg , { args } ) ;
39+ }
2540 } ;
2641 console . error = ( msg : string , ...args : any [ ] ) => {
27- globalConsoleStack [ globalConsoleStack . length - 1 ] . error ( msg , { args } ) ;
42+ const logger = ConsoleLoggerStack . top ( ) ;
43+ if ( logger ) {
44+ logger . error ( msg , { args } ) ;
45+ }
2846 } ;
2947 }
3048 globalConsoleStack . push ( logger ) ;
@@ -33,6 +51,9 @@ function _push(logger: Logger) {
3351}
3452
3553function _pop ( ) {
54+ if ( ! globalConsoleStack ) {
55+ return ;
56+ }
3657 globalConsoleStack [ globalConsoleStack . length - 1 ] . complete ( ) ;
3758 globalConsoleStack . pop ( ) ;
3859 if ( globalConsoleStack . length == 0 ) {
@@ -55,18 +76,16 @@ export class ConsoleLoggerStack {
5576 static push ( logger : Logger ) : Logger ;
5677 static push < T extends Logger > ( loggerClass : LoggerConstructor < T > , ...args : any [ ] ) : Logger ;
5778 static push < T extends Logger > ( nameOrLogger : string | Logger | LoggerConstructor < T > = '' ,
58- ...args : any [ ] ) {
79+ ...args : any [ ] ) : Logger {
5980 if ( typeof nameOrLogger == 'string' ) {
60- return _push ( new Logger ( nameOrLogger as string , this . top ( ) ) ) ;
81+ return _push ( new Logger ( nameOrLogger , this . top ( ) ) ) ;
6182 } else if ( nameOrLogger instanceof Logger ) {
62- const logger = nameOrLogger as Logger ;
63- if ( logger . parent !== this . top ( ) ) {
83+ if ( nameOrLogger . parent !== this . top ( ) ) {
6484 throw new Error ( 'Pushing a logger that is not a direct child of the top of the stack.' ) ;
6585 }
66- return _push ( logger ) ;
86+ return _push ( nameOrLogger ) ;
6787 } else {
68- const klass = nameOrLogger as LoggerConstructor < T > ;
69- return _push ( new klass ( ...args , this . top ( ) ) ) ;
88+ return _push ( new nameOrLogger ( ...args , this . top ( ) ) ) ;
7089 }
7190 }
7291 static pop ( ) : Logger | null {
@@ -82,19 +101,18 @@ export class ConsoleLoggerStack {
82101 static start ( logger : Logger ) : Logger ;
83102 static start < T extends Logger > ( loggerClass : LoggerConstructor < T > , ...args : any [ ] ) : Logger ;
84103 static start < T extends Logger > ( nameOrLogger : string | Logger | LoggerConstructor < T > = '' ,
85- ...args : any [ ] ) {
104+ ...args : any [ ] ) : Logger {
86105 if ( globalConsoleStack !== null ) {
87106 throw new Error ( 'Cannot start a new console logger stack while one is already going.' ) ;
88107 }
89108
90109 globalConsoleStack = [ ] ;
91110 if ( typeof nameOrLogger == 'string' ) {
92- return _push ( new Logger ( nameOrLogger as string , this . top ( ) ) ) ;
111+ return _push ( new Logger ( nameOrLogger , this . top ( ) ) ) ;
93112 } else if ( nameOrLogger instanceof Logger ) {
94- return _push ( nameOrLogger as Logger ) ;
113+ return _push ( nameOrLogger ) ;
95114 } else {
96- const klass = nameOrLogger as LoggerConstructor < T > ;
97- return _push ( new klass ( ...args , this . top ( ) ) ) ;
115+ return _push ( new nameOrLogger ( ...args , this . top ( ) ) ) ;
98116 }
99117 }
100118 static end ( ) {
0 commit comments