mirror of
https://github.com/bower/bower.git
synced 2026-04-24 03:00:19 -04:00
84 lines
1.6 KiB
JavaScript
84 lines
1.6 KiB
JavaScript
var EventEmitter = require('events').EventEmitter;
|
|
var util = require('util');
|
|
var mout = require('mout');
|
|
|
|
function Logger() {
|
|
this._interceptors = [];
|
|
this._piped = [];
|
|
}
|
|
|
|
util.inherits(Logger, EventEmitter);
|
|
|
|
Logger.prototype.intercept = function (fn) {
|
|
this._interceptors.push(fn);
|
|
return this;
|
|
};
|
|
|
|
Logger.prototype.emit = function () {
|
|
var ret;
|
|
var args = arguments;
|
|
|
|
// Run interceptors before
|
|
if (args[0] === 'log') {
|
|
this._interceptors.forEach(function (interceptor) {
|
|
interceptor.apply(this, mout.lang.toArray(args).slice(1));
|
|
});
|
|
}
|
|
|
|
ret = EventEmitter.prototype.emit.apply(this, args);
|
|
|
|
// Pipe
|
|
this._piped.forEach(function (emitter) {
|
|
emitter.emit.apply(emitter, args);
|
|
});
|
|
|
|
return ret;
|
|
};
|
|
|
|
Logger.prototype.pipe = function (emitter) {
|
|
this._piped.push(emitter);
|
|
|
|
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 || {}
|
|
};
|
|
|
|
// Emit log
|
|
this.emit('log', log);
|
|
|
|
return this;
|
|
};
|
|
|
|
// ------------------
|
|
|
|
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;
|