@@ -17,6 +17,11 @@ export interface ILogger {
1717 error : typeof console . error ;
1818}
1919
20+ /**
21+ *
22+ */
23+ export type LoggerListener = ( level : LogLevel , message ?: unknown , ...optionalParams : any [ ] ) => void ;
24+
2025/** The logger class. */
2126export class Logger implements ILogger {
2227 private static readonly LOG_LEVELS : [ 'debug' , 'log' , 'info' , 'warn' , 'error' ] = [
@@ -27,6 +32,8 @@ export class Logger implements ILogger {
2732 'error'
2833 ] ;
2934
35+ private readonly listeners : LoggerListener [ ] = [ ] ;
36+
3037 /**
3138 * Constructs a new logger.
3239 *
@@ -103,12 +110,32 @@ export class Logger implements ILogger {
103110 this . message ( LogLevel . ERROR , message , ...optionalParams ) ;
104111 }
105112
113+ /**
114+ * Adds a log listener.
115+ *
116+ * @param callback The listener callback.
117+ */
118+ public addListener ( callback : LoggerListener ) : void {
119+ this . listeners . push ( callback ) ;
120+ }
121+
122+ /**
123+ * Removes a log listener.
124+ *
125+ * @param callback The listener callback.
126+ */
127+ public removeListener ( callback : LoggerListener ) : void {
128+ const index : number = this . listeners . indexOf ( callback ) ;
129+ this . listeners . splice ( index , 1 ) ;
130+ }
131+
106132 private message ( level : LogLevel , message ?: any , ...optionalParams : any [ ] ) : void {
107133 if ( this . level !== LogLevel . OFF && this . level <= level ) {
108134 const logLevel : 'debug' | 'log' | 'info' | 'warn' | 'error' | undefined =
109135 Logger . LOG_LEVELS [ level as number ] ;
110136 if ( logLevel ) {
111137 this . logger [ logLevel ] ( message , ...optionalParams ) ;
138+ this . listeners . forEach ( ( cb ) => cb ( level , message , ...optionalParams ) ) ;
112139 }
113140 }
114141 }
0 commit comments