| /* eslint quote-props:0 */ |
| var util = require('util') |
| var events = require('events') |
| |
| var chalk = require('chalk') |
| |
| var Logger = new events.EventEmitter() |
| |
| Logger.Level = { |
| DEBUG: 1 |
| , VERBOSE: 2 |
| , INFO: 3 |
| , IMPORTANT: 4 |
| , WARNING: 5 |
| , ERROR: 6 |
| , FATAL: 7 |
| } |
| |
| // Exposed for other modules |
| Logger.LevelLabel = { |
| 1: 'DBG' |
| , 2: 'VRB' |
| , 3: 'INF' |
| , 4: 'IMP' |
| , 5: 'WRN' |
| , 6: 'ERR' |
| , 7: 'FTL' |
| } |
| |
| Logger.globalIdentifier = '*' |
| |
| function Log(tag) { |
| this.tag = tag |
| this.names = { |
| 1: 'DBG' |
| , 2: 'VRB' |
| , 3: 'INF' |
| , 4: 'IMP' |
| , 5: 'WRN' |
| , 6: 'ERR' |
| , 7: 'FTL' |
| } |
| this.styles = { |
| 1: 'grey' |
| , 2: 'cyan' |
| , 3: 'green' |
| , 4: 'magenta' |
| , 5: 'yellow' |
| , 6: 'red' |
| , 7: 'red' |
| } |
| this.localIdentifier = null |
| events.EventEmitter.call(this) |
| } |
| |
| util.inherits(Log, events.EventEmitter) |
| |
| Logger.createLogger = function(tag) { |
| return new Log(tag) |
| } |
| |
| Logger.setGlobalIdentifier = function(identifier) { |
| Logger.globalIdentifier = identifier |
| return Logger |
| } |
| |
| Log.Entry = function(timestamp, priority, tag, pid, identifier, message) { |
| this.timestamp = timestamp |
| this.priority = priority |
| this.tag = tag |
| this.pid = pid |
| this.identifier = identifier |
| this.message = message |
| } |
| |
| Log.prototype.setLocalIdentifier = function(identifier) { |
| this.localIdentifier = identifier |
| } |
| |
| Log.prototype.debug = function() { |
| this._write(this._entry(Logger.Level.DEBUG, arguments)) |
| } |
| |
| Log.prototype.verbose = function() { |
| this._write(this._entry(Logger.Level.VERBOSE, arguments)) |
| } |
| |
| Log.prototype.info = function() { |
| this._write(this._entry(Logger.Level.INFO, arguments)) |
| } |
| |
| Log.prototype.important = function() { |
| this._write(this._entry(Logger.Level.IMPORTANT, arguments)) |
| } |
| |
| Log.prototype.warn = function() { |
| this._write(this._entry(Logger.Level.WARNING, arguments)) |
| } |
| |
| Log.prototype.error = function() { |
| this._write(this._entry(Logger.Level.ERROR, arguments)) |
| } |
| |
| Log.prototype.fatal = function() { |
| this._write(this._entry(Logger.Level.FATAL, arguments)) |
| } |
| |
| Log.prototype._entry = function(priority, args) { |
| return new Log.Entry( |
| Date.now() |
| , priority |
| , this.tag |
| , process.pid |
| , this.localIdentifier || Logger.globalIdentifier |
| , util.format.apply(util, args) |
| ) |
| } |
| |
| Log.prototype._format = function(entry) { |
| return util.format('%s/%s %d [%s] %s' |
| , this._name(entry.priority) |
| , entry.tag |
| , entry.pid |
| , entry.identifier |
| , entry.message |
| ) |
| } |
| |
| Log.prototype._name = function(priority) { |
| return chalk[this.styles[priority]](this.names[priority]) |
| } |
| |
| /* eslint no-console: 0 */ |
| Log.prototype._write = function(entry) { |
| console.error(this._format(entry)) |
| this.emit('entry', entry) |
| Logger.emit('entry', entry) |
| } |
| |
| exports = module.exports = Logger |