logger

logger = require('logger').create() logger.info("blah") => [2011-3-3T20:24:4.810 info (5021)] blah logger.debug("boom") => logger.level = Logger.levels.debug logger.debug(function() { return "booom" }) => [2011-3-3T20:24:4.810 error (5021)] booom

var Logger;

Logger = (function() {
    function Logger(options) {
        var level, num, ref;
        this.options = options || {};
        this.level = this.options.level || Logger.levels.default;
        ref = Logger.levels;
        for (level in ref) {
            num = ref[level];
            Logger.define(this, level);
        }
    }

    Logger.prototype.add = function(level, message, callback) {
        if (this.level > (Logger.levels[level] || 5)) {
            return;
        }
        if (callback) {
            message = callback();
        } else if (typeof message === 'function') {
            message = message();
        }
        return this.write({
            timestamp: new Date,
            severity: level,
            message: message,
            pid: process.pid
        });
    };

    function formatTime(timestamp){
        var hh = timestamp.getUTCHours();
        var mm = timestamp.getUTCMinutes();
        var ss = timestamp.getSeconds();
        var ms = timestamp.getMilliseconds();

If you were building a timestamp instead of a duration, you would uncomment the following line to get 12-hour (not 24) time if (hh > 12) {hh = hh % 12;} These lines ensure you have two-digits

        if (hh < 10) {hh = "0"+hh;}
        if (mm < 10) {mm = "0"+mm;}
        if (ss < 10) {ss = "0"+ss;}
        if (ms < 100){ms = "0"+ms;}
        if (ms < 10) {ms = "00"+ms;}

This formats your string to HH:MM:SS

        var t = hh+":"+mm+":"+ss +' ('+ms+')';
        return t;
    }

    Logger.prototype.write = function(options) {
        if(typeof console !== 'undefined'){
            if(typeof console.log  !== 'undefined'){
                return console.log(this.build_message(options));
            }
        }
    };

    Logger.prototype.build_message = function(options) {
        return "[" + formatTime(options.timestamp) + "] " + options.message;
    };

    return Logger;

})();

Logger.define = function(logger, level) {
    return logger[level] = function(message, callback) {
        return this.add(level, message, callback);
    };
};

Logger.levels = {
    debug: 1,
    info: 2,
    warn: 3,
    error: 4,
    fatal: 5,
    default:1
};

exports.create = function(type, options) {
    return new Logger(options);
};