Files
deployd/lib/log.js
Ritchie Martori d113797c1a session store
2011-12-19 20:56:27 -08:00

78 lines
1.8 KiB
JavaScript

var util = require('util')
, prevLines = 0
, prevTime = new Date().getTime();
function time() {
// the time since last log if longer than a while
var result = ''
, now = new Date().getTime()
, diff = (now - prevTime) / 1000;
if(diff > 5) {
result = '\n...' + "\033[31m" + diff.toFixed(2) + "\033[m" + 's...\n';
} else if(diff > 1) {
result = '\n...' + "\033[1;33m" + diff.toFixed(2) + "\033[m" + 's...\n';
} else if(diff > 0.1) {
result = '\n...' + "\033[32m" + diff.toFixed(2) + "\033[m" + 's...\n';
}
prevTime = new Date().getTime();
return result;
}
function notice(type) {
var colors = {
error: '31', // red
info: '32', // green
warn: '1;33', // yellow
log: ''
};
var messages = {
error: 'ERR ',
info: 'INFO ',
warn: 'WARN ',
log: 'LOG '
}
return "\033[" + colors[type] + "m" + messages[type] + "\033[m"
}
function format(msg, method) {
var result = notice(method) + msg.replace(/\n/g, '\n' + notice(method))
, parts = result.split('\n');
if(prevLines > 1 || parts.length > 1) {
result = '\n' + result;
}
prevLines = parts.length;
return result + '\n';
}
['log', 'info', 'error', 'warn'].forEach(function(method) {
var old = console[method];
console[method] = module.exports[method] = function() {
var msg = util.format.apply(this, arguments);
if(method === 'error') {
var err = new Error;
err.name = 'Error';
err.message = arguments[0];
Error.captureStackTrace(err, arguments.callee);
msg = err.stack;
}
// allow for a custom writer
if(module.exports.writer) exports.writer(msg, method);
// format for readability
msg = format(msg, method);
// output
process.stdout.write(time() + msg);
}
});