Files
bower/lib/core/Logger.js
André Cruz afd01cc40c Change from promise progress events to hierarchical logger.
This is an huge commit, contains other small tweaks/fixes.
2013-06-03 16:31:19 +01:00

73 lines
1.3 KiB
JavaScript

var EventEmitter = require('events').EventEmitter;
var util = require('util');
function Logger() {
this._interceptors = [];
}
util.inherits(Logger, EventEmitter);
Logger.prototype.intercept = function (fn) {
this._interceptors.push(fn);
return this;
};
Logger.prototype.pipe = function (emitter) {
this.on('log', function (log) {
emitter.emit('log', log);
});
return emitter;
};
Logger.prototype.geminate = function () {
var logger = new Logger();
logger.pipe(this);
return logger;
};
Logger.prototype.log = function (level, id, message, data) {
var log = {
level: level,
id: id,
message: message,
data: data || {}
};
// Run interceptors
this._runInterceptors(log);
// Emit log
this.emit('log', log);
return this;
};
// ------------------
Logger.prototype._runInterceptors = function (log) {
// Run interceptors
this._interceptors.forEach(function (interceptor) {
interceptor(log);
});
};
Logger.LEVELS = {
'error': 5,
'conflict': 4,
'warn': 3,
'action': 2,
'info': 1,
'debug': 0
};
// Add helpful log methods
Object.keys(Logger.LEVELS).forEach(function (level) {
Logger.prototype[level] = function (id, message, data) {
this.log(level, id, message, data);
};
});
module.exports = Logger;