docs: function Logger(config) {
      var self    = this;
      var config  = config || {};
      var options = config.options || {};
      var debug   = options.debug || false;
      var dev     = options.dev || false;
      var logging = config.logging || {};
  
      details = options.debugDetails || false;
      ignored = options.debugIgnore || [];
  
      if (typeof logging !== 'object') { logging = {}; }
  
      var enabled = typeof logging.enabled !== 'undefined' ? logging.enabled : false;
      var rewrite = typeof logging.rewrite !== 'undefined' ? logging.rewrite : true;
      var chat    = typeof logging.chat !== 'undefined' ? logging.chat : false;
  
      timestamp = typeof logging.timestamp !== 'undefined' ? logging.timestamp : true;
  
      this.options = {
          stream: process.stdout,
          wstream: null,
          level: 'raw'
      };
  
      if (debug && details) { this.options.level = 'chat'; }
      if (dev) { this.options.level = 'dev'; }
      if (!debug) { this.options.level = 'crash'; }
  
      if (enabled) {
          ensureExists('./logs', function(err) {
              if (!err) {
                  var flag = rewrite ? 'w' : 'a';
                  var stream = filesystem.createWriteStream('./logs/status.log', { flags: flag });
                  self.options.wstream = stream;
                  if (chat) { self.options.level = 'chat'; }
              }
          });
      }
  
      this.templates = {
          chat:  '[:timestamp] \x1b[35mchat\x1b[39m   - :message',
          action:  '[:timestamp] \x1b[35maction\x1b[39m - :message',
          dev:   '\x1b[90m  :message\x1b[39m',
          raw:   '[:timestamp] \x1b[36mraw\x1b[39m    - :message',
          event: '[:timestamp] \x1b[32mevent\x1b[39m  - :message',
          info:  '[:timestamp] \x1b[33minfo\x1b[39m   - :message',
          error: '[:timestamp] \x1b[31merror\x1b[39m  - :message',
          crash: '[:timestamp] \x1b[31merror\x1b[39m  - :message',
          inspect: true
      };
  }