octavian-nita
11/17/2014 - 2:02 PM

Simple logging for Node.js

Simple logging for Node.js

'use strict';

var config = require('./config');

/**
 * @param {string} [level=INFO] by default, 'expected' (from a formatting point of view) values are: ERROR, WARN,
 * WARNING, INFO and DEBUG.
 */
function log(level, messageOrError /* messagePart1, messagePart2, ... */) {
  var
    time = new Date().toISOString().replace(/[TZ]/gi, ' ').trim(),
    args = Array.prototype.slice.call(arguments, 2),
    logfn = console.log;

  level = (level && level.trim().toUpperCase()) || 'INFO';
  if (level === 'DEBUG' && !config.debug.on) {
    return;
  }

  if (level === 'ERROR') {
    logfn = console.error;
  } else if (level === 'WARN' || level === 'WARNING') {
    logfn = console.warn;
    level = 'WARN ';  // use the 'short' level text
  } else if (level === 'INFO') {
    level = 'INFO ';
  }

  if (messageOrError && messageOrError instanceof Error) {
    if (args && args.length) {
      logfn.apply(console, [time, level, '-'].concat(args));
    }
    logfn.call(console, time, level, '-', messageOrError.stack ? messageOrError.stack : messageOrError);
  } else {
    logfn.apply(console, [time, level, '-', messageOrError].concat(args));
  }
}
exports.log = log;

exports.debug = function() {
  log.apply(null, ['DEBUG'].concat(Array.prototype.slice.call(arguments, 0)));
};

exports.error = function() {
  log.apply(null, ['ERROR'].concat(Array.prototype.slice.call(arguments, 0)));
};

exports.warn = function() {
  log.apply(null, ['WARN'].concat(Array.prototype.slice.call(arguments, 0)));
};

exports.info = function() {
  log.apply(null, ['INFO'].concat(Array.prototype.slice.call(arguments, 0)));
};