rc-web@69: rc-web@69: /*! rc-web@69: * socket.io-node rc-web@69: * Copyright(c) 2011 LearnBoost rc-web@69: * MIT Licensed rc-web@69: */ rc-web@69: rc-web@69: /** rc-web@69: * Module dependencies. rc-web@69: */ rc-web@69: rc-web@69: var util = require('./util') rc-web@69: , toArray = util.toArray; rc-web@69: rc-web@69: /** rc-web@69: * Log levels. rc-web@69: */ rc-web@69: rc-web@69: var levels = [ rc-web@69: 'error' rc-web@69: , 'warn' rc-web@69: , 'info' rc-web@69: , 'debug' rc-web@69: ]; rc-web@69: rc-web@69: /** rc-web@69: * Colors for log levels. rc-web@69: */ rc-web@69: rc-web@69: var colors = [ rc-web@69: 31 rc-web@69: , 33 rc-web@69: , 36 rc-web@69: , 90 rc-web@69: ]; rc-web@69: rc-web@69: /** rc-web@69: * Pads the nice output to the longest log level. rc-web@69: */ rc-web@69: rc-web@69: function pad (str) { rc-web@69: var max = 0; rc-web@69: rc-web@69: for (var i = 0, l = levels.length; i < l; i++) rc-web@69: max = Math.max(max, levels[i].length); rc-web@69: rc-web@69: if (str.length < max) rc-web@69: return str + new Array(max - str.length + 1).join(' '); rc-web@69: rc-web@69: return str; rc-web@69: }; rc-web@69: rc-web@69: /** rc-web@69: * Logger (console). rc-web@69: * rc-web@69: * @api public rc-web@69: */ rc-web@69: rc-web@69: var Logger = module.exports = function (opts) { rc-web@69: opts = opts || {} rc-web@69: this.colors = false !== opts.colors; rc-web@69: this.level = 3; rc-web@69: this.enabled = true; rc-web@69: }; rc-web@69: rc-web@69: /** rc-web@69: * Log method. rc-web@69: * rc-web@69: * @api public rc-web@69: */ rc-web@69: rc-web@69: Logger.prototype.log = function (type) { rc-web@69: var index = levels.indexOf(type); rc-web@69: rc-web@69: if (index > this.level || !this.enabled) rc-web@69: return this; rc-web@69: rc-web@69: console.log.apply( rc-web@69: console rc-web@69: , [this.colors rc-web@69: ? ' \033[' + colors[index] + 'm' + pad(type) + ' -\033[39m' rc-web@69: : type + ':' rc-web@69: ].concat(toArray(arguments).slice(1)) rc-web@69: ); rc-web@69: rc-web@69: return this; rc-web@69: }; rc-web@69: rc-web@69: /** rc-web@69: * Generate methods. rc-web@69: */ rc-web@69: rc-web@69: levels.forEach(function (name) { rc-web@69: Logger.prototype[name] = function () { rc-web@69: this.log.apply(this, [name].concat(toArray(arguments))); rc-web@69: }; rc-web@69: });