whole_func_string: function parseEnvironment(env, cfg) {
    assume(cfg).is.an('object');
    let _default = cfg.level || 'info';
    if (!env || env === '') {
      return _default;
    }
    assume(env).is.a('string');
    let modules = env.split(',').map(x => x.trim());
    for (let x of modules) {
      let tokens = x.split(':');
      if (tokens.length < 2) {
        let errStr = 'Log levels must use format name:level ' +
          'not ' + tokens.join(':');
        throw new Error(errStr);
      }
      let level = tokens.slice(tokens.length - 1)[0];
      let name = tokens.slice(0, tokens.length - 1).join(':');
      if (allowedLevels.indexOf(level) === -1) {
        let errStr = 'Invalid log level setting: ' + level;
        throw new Error(errStr);
      }
      if (minimatch(cfg.name, name)) {
        return level;
      }
    }
  
    return _default;
  }
func_code_string: function parseEnvironment(env, cfg) {
    assume(cfg).is.an('object');
    let _default = cfg.level || 'info';
    if (!env || env === '') {
      return _default;
    }
    assume(env).is.a('string');
    let modules = env.split(',').map(x => x.trim());
    for (let x of modules) {
      let tokens = x.split(':');
      if (tokens.length < 2) {
        let errStr = 'Log levels must use format name:level ' +
          'not ' + tokens.join(':');
        throw new Error(errStr);
      }
      let level = tokens.slice(tokens.length - 1)[0];
      let name = tokens.slice(0, tokens.length - 1).join(':');
      if (allowedLevels.indexOf(level) === -1) {
        let errStr = 'Invalid log level setting: ' + level;
        throw new Error(errStr);
      }
      if (minimatch(cfg.name, name)) {
        return level;
      }
    }
  
    return _default;
  }
func_documentation_string: Parse a string into a mapping of logger names to levels to determine which
  level of logging a given logging module should use.  This is done so that we
  can optionally have Trace level for what you're working on but then only
  have warnings and higher for the rest of the code.  This is similar in
  concept to the debug module, but needs higher granularity because we have
  more than one log level.  There is currently no globbing support so you will
  have to specify all 'name' values in the variable as fully resolved.  The
  special value '*' as a name sets the log level for all levels not mentioned.
  
  Example Variable: "provisioner:trace, api:info,azure-entities:error, *:fatal"