Create a Logger instance.

@param conf The logger configuration.
@param bitwise A boolean indicating that log levels
should use bitwise operators.
@param parent A parent logger that owns this logger.
function(conf, bitwise, parent) {
  EventEmitter.call(this);
  conf = conf || {};
  constants(this);
  this.keys = keys;
  this.bitwise = (bitwise === true);
  this.configure();
  var cstreams = parent && conf.streams;
  var streams = conf.streams, stream = conf.stream;
  streams = streams || this.getDefaultStream(conf);
  delete conf.streams;
  delete conf.stream;
  var target = parent ? merge(parent.conf, {}) : merge(defaults, {});
  this.conf = merge(conf, target);
  if(typeof this.conf.name !== 'string' || !this.conf.name.length) {
    throw new Error('Logger name \'' + this.conf.name + '\' is invalid');
  }
  this.name = this.conf.name;
  conf.streams = streams;
  if(stream) conf.stream = stream;
  this.pid = this.conf.pid || process.pid;
  this.hostname = this.conf.hostname || os.hostname();
  this.fields = {};
  this.streams = [];
  if(parent && cstreams) {
    streams = Array.isArray(streams) ? streams : [streams];
    streams = streams.concat(conf.streams);
  }
  this.initialize(streams);
}