var util = require('util');

module.exports = {
  err: err,
  info: info,
  debug: debug,
  setOutput: function(newUtil) {
    util = newUtil;
  }
};

function err(msg) {
  util.error(msg.toString(), '\n');
}

function info(msg) {
  util.print(msg, '\n');
}

function debug() {
  var arr = Array.prototype.slice.call(arguments);
  util.print.apply(null, arr.map(explode));
}

function explode(arg) {
  return util.inspect(arg, { showHidden: true, depth: 2 }) + '\n';
}

@@ -22,16 +22,88 @@
 til');%0A%0A
+var out = %7B%0A  console: console%0A%7D;%0A%0Avar verbose = 0;%0A%0Afunction nop() %7B%7D%0A%0A
 module.e
@@ -181,100 +181,458 @@
 ion(
-newUtil) %7B%0A    util = newUtil;%0A  %7D%0A%7D;%0A%0Afunction err(msg) %7B%0A  util.error(msg.toString(), '%5Cn'
+c) %7B%0A    if (c)%0A      out.console = c;%0A    else%0A      out.console = %7B%0A        log: nop,%0A        error: nop%0A      %7D;%0A  %7D,%0A  setVerbose: function(v) %7B%0A    verbose = v;%0A  %7D%0A%7D;%0A%0Afunction timestamp() %7B%0A  return '%5B' + new Date().toISOString() + '%5D';%0A%7D%0A%0Afunction log(stream) %7B%0A  return function() %7B%0A    stream%0A      .bind(undefined, timestamp())%0A      .apply(undefined, arguments);%0A  %7D%0A%7D%0A%0Afunction err() %7B%0A  log(out.console.error).apply(undefined, arguments
 );%0A%7D
@@ -651,37 +651,82 @@
 nfo(
-msg
 ) %7B%0A  
-util.print(msg, '%5Cn'
+if (verbose %3E 0)%0A    log(out.console.log).apply(undefined, arguments
 );%0A%7D

Add timestamps and verbosity option to log.js