mirror of
https://github.com/abrendan/MicDropMessages.git
synced 2025-06-16 20:55:00 +02:00
252 lines
3.7 KiB
JavaScript
252 lines
3.7 KiB
JavaScript
/*!
|
|
* Log.js
|
|
* Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
|
|
* MIT Licensed
|
|
*/
|
|
|
|
/**
|
|
* Module dependencies.
|
|
*/
|
|
|
|
var fmt = require('util').format;
|
|
var EventEmitter = require('events').EventEmitter;
|
|
|
|
/**
|
|
* Initialize a `Loggeer` with the given log `level` defaulting
|
|
* to __DEBUG__ and `stream` defaulting to _stdout_.
|
|
*
|
|
* @param {Number} level
|
|
* @param {Object} stream
|
|
* @api public
|
|
*/
|
|
|
|
var Log = exports = module.exports = function Log(level, stream){
|
|
if ('string' == typeof level) level = exports[level.toUpperCase()];
|
|
this.level = level || exports.DEBUG;
|
|
this.stream = stream || process.stdout;
|
|
if (this.stream.readable) this.read();
|
|
};
|
|
|
|
/**
|
|
* System is unusable.
|
|
*
|
|
* @type Number
|
|
*/
|
|
|
|
exports.EMERGENCY = 0;
|
|
|
|
/**
|
|
* Action must be taken immediately.
|
|
*
|
|
* @type Number
|
|
*/
|
|
|
|
exports.ALERT = 1;
|
|
|
|
/**
|
|
* Critical condition.
|
|
*
|
|
* @type Number
|
|
*/
|
|
|
|
exports.CRITICAL = 2;
|
|
|
|
/**
|
|
* Error condition.
|
|
*
|
|
* @type Number
|
|
*/
|
|
|
|
exports.ERROR = 3;
|
|
|
|
/**
|
|
* Warning condition.
|
|
*
|
|
* @type Number
|
|
*/
|
|
|
|
exports.WARNING = 4;
|
|
|
|
/**
|
|
* Normal but significant condition.
|
|
*
|
|
* @type Number
|
|
*/
|
|
|
|
exports.NOTICE = 5;
|
|
|
|
/**
|
|
* Purely informational message.
|
|
*
|
|
* @type Number
|
|
*/
|
|
|
|
exports.INFO = 6;
|
|
|
|
/**
|
|
* Application debug messages.
|
|
*
|
|
* @type Number
|
|
*/
|
|
|
|
exports.DEBUG = 7;
|
|
|
|
/**
|
|
* prototype.
|
|
*/
|
|
|
|
Log.prototype = {
|
|
|
|
/**
|
|
* Start emitting "line" events.
|
|
*
|
|
* @api public
|
|
*/
|
|
|
|
read: function(){
|
|
var buf = ''
|
|
, self = this
|
|
, stream = this.stream;
|
|
|
|
stream.setEncoding('utf8');
|
|
stream.on('data', function(chunk){
|
|
buf += chunk;
|
|
if ('\n' != buf[buf.length - 1]) return;
|
|
buf.split('\n').map(function(line){
|
|
if (!line.length) return;
|
|
try {
|
|
var captures = line.match(/^\[([^\]]+)\] (\w+) (.*)/);
|
|
var obj = {
|
|
date: new Date(captures[1])
|
|
, level: exports[captures[2]]
|
|
, levelString: captures[2]
|
|
, msg: captures[3]
|
|
};
|
|
self.emit('line', obj);
|
|
} catch (err) {
|
|
// Ignore
|
|
}
|
|
});
|
|
buf = '';
|
|
});
|
|
|
|
stream.on('end', function(){
|
|
self.emit('end');
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Log output message.
|
|
*
|
|
* @param {String} levelStr
|
|
* @param {Array} args
|
|
* @api private
|
|
*/
|
|
|
|
log: function(levelStr, args) {
|
|
if (exports[levelStr] <= this.level) {
|
|
var msg = fmt.apply(null, args);
|
|
this.stream.write(
|
|
'[' + new Date + ']'
|
|
+ ' ' + levelStr
|
|
+ ' ' + msg
|
|
+ '\n'
|
|
);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Log emergency `msg`.
|
|
*
|
|
* @param {String} msg
|
|
* @api public
|
|
*/
|
|
|
|
emergency: function(msg){
|
|
this.log('EMERGENCY', arguments);
|
|
},
|
|
|
|
/**
|
|
* Log alert `msg`.
|
|
*
|
|
* @param {String} msg
|
|
* @api public
|
|
*/
|
|
|
|
alert: function(msg){
|
|
this.log('ALERT', arguments);
|
|
},
|
|
|
|
/**
|
|
* Log critical `msg`.
|
|
*
|
|
* @param {String} msg
|
|
* @api public
|
|
*/
|
|
|
|
critical: function(msg){
|
|
this.log('CRITICAL', arguments);
|
|
},
|
|
|
|
/**
|
|
* Log error `msg`.
|
|
*
|
|
* @param {String} msg
|
|
* @api public
|
|
*/
|
|
|
|
error: function(msg){
|
|
this.log('ERROR', arguments);
|
|
},
|
|
|
|
/**
|
|
* Log warning `msg`.
|
|
*
|
|
* @param {String} msg
|
|
* @api public
|
|
*/
|
|
|
|
warning: function(msg){
|
|
this.log('WARNING', arguments);
|
|
},
|
|
|
|
/**
|
|
* Log notice `msg`.
|
|
*
|
|
* @param {String} msg
|
|
* @api public
|
|
*/
|
|
|
|
notice: function(msg){
|
|
this.log('NOTICE', arguments);
|
|
},
|
|
|
|
/**
|
|
* Log info `msg`.
|
|
*
|
|
* @param {String} msg
|
|
* @api public
|
|
*/
|
|
|
|
info: function(msg){
|
|
this.log('INFO', arguments);
|
|
},
|
|
|
|
/**
|
|
* Log debug `msg`.
|
|
*
|
|
* @param {String} msg
|
|
* @api public
|
|
*/
|
|
|
|
debug: function(msg){
|
|
this.log('DEBUG', arguments);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Inherit from `EventEmitter`.
|
|
*/
|
|
|
|
Log.prototype.__proto__ = EventEmitter.prototype;
|