105 lines
2.2 KiB
JavaScript
105 lines
2.2 KiB
JavaScript
var fs = require('fs');
|
|
var util = require('util');
|
|
|
|
var streams = [];
|
|
var labels = {};
|
|
var chain;
|
|
|
|
function _log(arg1, arg2) {
|
|
var label = '';
|
|
var msg = '';
|
|
if (typeof arg2 === 'undefined') {
|
|
if (arg1 instanceof Arguments) {
|
|
for (var arg in arg1) {
|
|
msg += util.format(arg1[arg]);
|
|
}
|
|
} else {
|
|
msg = util.format(arg1);
|
|
}
|
|
} else {
|
|
label = arg1;
|
|
if (arg2 instanceof Arguments) {
|
|
for (var arg in arg2) {
|
|
msg += util.format(arg2[arg]);
|
|
}
|
|
} else {
|
|
msg = util.format(arg2);
|
|
}
|
|
}
|
|
|
|
// build our output customization string
|
|
var str = '';
|
|
if (typeof labels[label] !== 'undefined') {
|
|
for (var j = labels[label].length-1; j >= 0; j--) {
|
|
str = labels[label][j](str);
|
|
if (j == 0) str += ' ';
|
|
}
|
|
}
|
|
// write our string to our streams
|
|
for (var i = 0; i < streams.length; i++) {
|
|
streams[i].write(str+msg+'\n');
|
|
}
|
|
return module.exports;
|
|
}
|
|
|
|
function init(file) {
|
|
if (typeof file !== 'undefined') {
|
|
var writable = fs.createWriteStream(file);
|
|
streams.push(writable);
|
|
}
|
|
if (process.stdin.isTTY) {
|
|
streams.push(process.stdin);
|
|
}
|
|
return module.exports;
|
|
}
|
|
module.exports.init = init;
|
|
|
|
function setup() {
|
|
var cur, last;
|
|
chain = cur = last = streams[0];
|
|
for (var i = 0; i < streams.length; i++) {
|
|
cur = streams[i];
|
|
if (last != cur) {
|
|
last.pipe(cur);
|
|
}
|
|
last = cur;
|
|
}
|
|
return module.exports;
|
|
}
|
|
module.exports.setup = setup;
|
|
|
|
function _new(label, options) {
|
|
labels[label] = [];
|
|
if (typeof options !== 'undefined') {
|
|
if (options.logLabel == true) {
|
|
labels[label].push(function(str) { return label+str });
|
|
}
|
|
if (options.logTime == true) {
|
|
labels[label].push(doTime);
|
|
}
|
|
}
|
|
streams[label] = [];
|
|
return get(label);
|
|
}
|
|
module.exports.new = _new;
|
|
|
|
function get(label) {
|
|
return function() { _log(label, toArguments(arguments)) };
|
|
}
|
|
module.exports.get = get;
|
|
module.exports.log = _new('');
|
|
|
|
function doTime(str) {
|
|
var new_str = '('+new Date().toISOString() + '):' + str;
|
|
return new_str;
|
|
}
|
|
|
|
function Arguments() {};
|
|
function toArguments(obj) {
|
|
var args = new Arguments();
|
|
for (var attr in obj) {
|
|
args[attr] = obj[attr];
|
|
}
|
|
return args;
|
|
}
|