Spaces:
Sleeping
Sleeping
| 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; | |