@@ -59,6 +59,14 @@ export const field = <T>(name: string, value: T): Field<T> => {
5959 return new Field ( name , value ) ;
6060} ;
6161
62+ export type Extender = ( msg : {
63+ message : string ,
64+ level : Level ,
65+ type : "trace" | "info" | "warn" | "debug" | "error" ,
66+ fields ?: FieldArray ,
67+ section ?: string ,
68+ } ) => void ;
69+
6270/**
6371 * This formats & builds text for logging.
6472 * It should only be used to build one log item at a time since it stores the
@@ -221,6 +229,7 @@ export class Logger {
221229 private _formatter : Formatter ,
222230 private readonly name ?: string ,
223231 private readonly defaultFields ?: FieldArray ,
232+ private readonly extenders : Extender [ ] = [ ] ,
224233 ) {
225234 if ( name ) {
226235 this . nameColor = this . hashStringToColor ( name ) ;
@@ -248,6 +257,10 @@ export class Logger {
248257 this . muted = true ;
249258 }
250259
260+ public extend ( extender : Extender ) : void {
261+ this . extenders . push ( extender ) ;
262+ }
263+
251264 /**
252265 * Outputs information.
253266 */
@@ -328,7 +341,7 @@ export class Logger {
328341 * Each name is deterministically generated a color.
329342 */
330343 public named ( name : string , ...fields : FieldArray ) : Logger {
331- const l = new Logger ( this . _formatter , name , fields ) ;
344+ const l = new Logger ( this . _formatter , name , fields , this . extenders ) ;
332345 if ( this . muted ) {
333346 l . mute ( ) ;
334347 }
@@ -393,6 +406,16 @@ export class Logger {
393406 console . log ( ...this . _formatter . flush ( ) ) ;
394407 }
395408 // tslint:enable no-console
409+
410+ this . extenders . forEach ( ( extender ) => {
411+ extender ( {
412+ section : this . name ,
413+ fields : options . fields ,
414+ level : options . level ,
415+ message : options . message as string ,
416+ type : options . type ,
417+ } ) ;
418+ } ) ;
396419 }
397420
398421 /**
0 commit comments