You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
1.7 KiB
82 lines
1.7 KiB
var colour = require('./colour'); |
|
var bus = require('./bus'); |
|
var required = false; |
|
var useColours = true; |
|
|
|
var coding = { |
|
log: 'black', |
|
info: 'yellow', |
|
status: 'green', |
|
detail: 'yellow', |
|
fail: 'red', |
|
error: 'red', |
|
}; |
|
|
|
function log(type, text) { |
|
var msg = '[nodemon] ' + (text || ''); |
|
|
|
if (useColours) { |
|
msg = colour(coding[type], msg); |
|
} |
|
|
|
// always push the message through our bus, using nextTick |
|
// to help testing and get _out of_ promises. |
|
process.nextTick(() => { |
|
bus.emit('log', { type: type, message: text, colour: msg }); |
|
}); |
|
|
|
// but if we're running on the command line, also echo out |
|
// question: should we actually just consume our own events? |
|
if (!required) { |
|
if (type === 'error') { |
|
console.error(msg); |
|
} else { |
|
console.log(msg || ''); |
|
} |
|
} |
|
} |
|
|
|
var Logger = function (r) { |
|
if (!(this instanceof Logger)) { |
|
return new Logger(r); |
|
} |
|
this.required(r); |
|
return this; |
|
}; |
|
|
|
Object.keys(coding).forEach(function (type) { |
|
Logger.prototype[type] = log.bind(null, type); |
|
}); |
|
|
|
// detail is for messages that are turned on during debug |
|
Logger.prototype.detail = function (msg) { |
|
if (this.debug) { |
|
log('detail', msg); |
|
} |
|
}; |
|
|
|
Logger.prototype.required = function (val) { |
|
required = val; |
|
}; |
|
|
|
Logger.prototype.debug = false; |
|
Logger.prototype._log = function (type, msg) { |
|
if (required) { |
|
bus.emit('log', { type: type, message: msg || '', colour: msg || '' }); |
|
} else if (type === 'error') { |
|
console.error(msg); |
|
} else { |
|
console.log(msg || ''); |
|
} |
|
}; |
|
|
|
Object.defineProperty(Logger.prototype, 'useColours', { |
|
set: function (val) { |
|
useColours = val; |
|
}, |
|
get: function () { |
|
return useColours; |
|
}, |
|
}); |
|
|
|
module.exports = Logger;
|
|
|