lib/runtime/log.js
function Logger( configuration, channels = [] ) {
   this.levels = { ...levels, ...configuration.get( 'logging.levels' ) };

   this.queueSize_ = 100;
   this.channels_ = channels;
   this.counter_ = 0;
   this.messageQueue_ = [];
   this.threshold_ = 0;
   this.tags_ = {};

   this.levelToName_ = ( levels => {
      const result = {};
      forEach( levels, ( level, levelName ) => {
         this[ levelName.toLowerCase() ] = ( ...args ) => {
            this.log( level, ...args, BLACKBOX );
         };
         result[ level ] = levelName;
      } );
      return result;
   } )( this.levels );

   this.setLogThreshold( configuration.ensure( 'logging.threshold' ) );
}
function Logger( configuration, channels = [] ) {
   this.levels = { ...levels, ...configuration.get( 'logging.levels' ) };

   this.queueSize_ = 100;
   this.channels_ = channels;
   this.counter_ = 0;
   this.messageQueue_ = [];
   this.threshold_ = 0;
   this.tags_ = {};

   this.levelToName_ = ( levels => {
      const result = {};
      forEach( levels, ( level, levelName ) => {
         this[ levelName.toLowerCase() ] = ( ...args ) => {
            this.log( level, ...args, BLACKBOX );
         };
         result[ level ] = levelName;
      } );
      return result;
   } )( this.levels );

   this.setLogThreshold( configuration.ensure( 'logging.threshold' ) );
}
function Logger ( configuration , channels = [ ] ) { this . levels = { ... levels , ... configuration . get ( 'logging.levels' ) } ; this . queueSize_ = 100 ; this . channels_ = channels ; this . counter_ = 0 ; this . messageQueue_ = [ ] ; this . threshold_ = 0 ; this . tags_ = { } ; this . levelToName_ = ( levels => { const result = { } ; forEach ( levels , ( level , levelName ) => { this [ levelName . toLowerCase ( ) ] = ( ... args ) => { this . log ( level , ... args , BLACKBOX ) ; } ; result [ level ] = levelName ; } ) ; return result ; } ) ( this . levels ) ; this . setLogThreshold ( configuration . ensure ( 'logging.threshold' ) ) ; }
eslint-disable-next-line valid-jsdoc 
A flexible logger.

It is recommended to prefer this logger over `console.log` and friends, at least for any log messages that
might make their way into production code. For once, this logger is safe to use across browsers and allows
to attach additional channels for routing messages to (i.e. to send them to a server process for
persistence). If a browser console is available, messages will be logged to that console using the builtin
console channel.
For testing, a silent mock for this logger is used, making it simple to test the logging behavior of
widgets and activities, while avoiding noisy log messages in the test runner output.

All messages produced

@constructor
@private
eslint - disable - next - line valid - jsdoc A flexible logger .