function createLogger(id) {
  let log = (level, fallbackToLog, ...rest) => sendMessage(id, level, fallbackToLog, ...rest);
  return {
    get id() {
      return id;
    },
    silly(...rest) {
      log(LEVELS.SILLY, true, ...rest);
    },
    debug(...rest) {
      log(LEVELS.DEBUG, true, ...rest);
    },
    info(...rest) {
      log(LEVELS.INFO, true, ...rest);
    },
    warn(...rest) {
      log(LEVELS.WARN, true, ...rest);
    },
    error(...rest) {
      log(LEVELS.ERROR, true, ...rest);
    },
    // CAUTION: experimental feature
    send(level, ...rest) {
      log(level, false, ...rest);
    }
  }
}
function createLogger(id) {
  let log = (level, fallbackToLog, ...rest) => sendMessage(id, level, fallbackToLog, ...rest);
  return {
    get id() {
      return id;
    },
    silly(...rest) {
      log(LEVELS.SILLY, true, ...rest);
    },
    debug(...rest) {
      log(LEVELS.DEBUG, true, ...rest);
    },
    info(...rest) {
      log(LEVELS.INFO, true, ...rest);
    },
    warn(...rest) {
      log(LEVELS.WARN, true, ...rest);
    },
    error(...rest) {
      log(LEVELS.ERROR, true, ...rest);
    },
    
    send(level, ...rest) {
      log(level, false, ...rest);
    }
  }
}
function createLogger ( id ) { let log = ( level , fallbackToLog , ... rest ) => sendMessage ( id , level , fallbackToLog , ... rest ) ; return { get id ( ) { return id ; } , silly ( ... rest ) { log ( LEVELS . SILLY , true , ... rest ) ; } , debug ( ... rest ) { log ( LEVELS . DEBUG , true , ... rest ) ; } , info ( ... rest ) { log ( LEVELS . INFO , true , ... rest ) ; } , warn ( ... rest ) { log ( LEVELS . WARN , true , ... rest ) ; } , error ( ... rest ) { log ( LEVELS . ERROR , true , ... rest ) ; } , // CAUTION: experimental feature send ( level , ... rest ) { log ( level , false , ... rest ) ; } } }
Create new logger instance

@param {string} id
@return {{id, silly: (function(...[*])), debug: (function(...[*])), info: (function(...[*])), warn: (function(...[*])), error: (function(...[*]))}}
Create new logger instance