srvc
Version:
Micro-services framework
121 lines (88 loc) • 2.95 kB
JavaScript
var __inNode = typeof module !== 'undefined' && module.exports
, __inAMD = typeof define == 'function' && define.amd;
if (! __inAMD) // not AMD (e.g. requireJS)
var define = function(moduleName, requirements, func) {
var dependencies = [];
requirements.forEach(function(req) {
if (req) dependencies.push( __inNode ? require(req) : window[req] );
});
func.apply(this, dependencies);
};
define('logger', ['underscore'],
function(_)
{
// Log levels.
var levels = [
'error'
, 'warn'
, 'info'
, 'debug'
];
// Colors for log levels.
var colors = [
31
, 33
, 36
, 90
];
var defaultOptions = {
colors: __inNode && process.env.NODE_ENV == 'development',
level: 3,
enabled: true,
logPrefix: __inNode ? '(' + process.pid + ')' : '',
logPrefixColor: 34
};
// Pads the nice output to the longest log level.
function pad (str) {
var max = 0;
for (var i = 0, l = levels.length; i < l; i++)
max = Math.max(max, levels[i].length);
return str.length < max
? padRight(str, max, ' ')
: str;
function padRight(s, len, ch) {
return s + new Array(len - s.length + 1).join(ch);
}
};
// Logger (console)
var Logger = function (opts) {
if (! this instanceof Logger) throw new Error('Logger should be used as constructor');
_.defaults(this, opts || {}, defaultOptions);
Logger.__logger = this;
};
// Log method.
Logger.prototype.log = function (type) {
var index = levels.indexOf(type);
if (index > this.level || ! this.enabled)
return this;
console.log.apply(
console
, [this.colors && this.logPrefixColor
? ' \033[' + this.logPrefixColor + 'm' + this.logPrefix + ' -\033[39m'
: this.logPrefix
,this.colors
? ' \033[' + colors[index] + 'm' + pad(type) + ' -\033[39m'
: type + ':'
].concat(Array.prototype.slice.call(arguments, 1))
);
return this;
};
// Generate methods for all log levels.
_.each(levels, function (name) {
Logger.prototype[name] = function () {
this.log.apply(this, [name].concat(Array.prototype.slice.call(arguments)));
};
Logger[name] = function () {
var logger = Logger.__logger;
if (! logger)
logger = new Logger(defaultOptions);
logger[name].apply(logger, arguments);
};
});
// exports for Node
if (__inNode) module.exports = Logger;
// exports for browser
if (! __inAMD && ! __inNode) window.Logger = Logger;
// exports for AMD (requirejs)
return Logger;
});