Browse Source

started prototype of version 0.2.0. added transactions, added basic file transaction, removed unneeded code from libindex.js, fixed example to continue working.

master
Brett Langdon 14 years ago
parent
commit
bb47de9f1d
6 changed files with 86 additions and 138 deletions
  1. +3
    -0
      .gitignore
  2. +6
    -3
      example/index.js
  3. +36
    -135
      lib/index.js
  4. +10
    -0
      lib/transaction/index.js
  5. +28
    -0
      lib/transactions/file.js
  6. +3
    -0
      lib/transactions/index.js

+ 3
- 0
.gitignore View File

@ -0,0 +1,3 @@
node_modules
*~
*#*#

+ 6
- 3
example/index.js View File

@ -1,11 +1,14 @@
var ledger = require('../')();
var ledger = require('../');
var logger = ledger.createLogger( {}, [
new ledger.transactions.file({})
]);
ledger.on('log::error', function(time, msg){
logger.on('log::error', function(time, msg){
//do somethign special with errors //do somethign special with errors
}); });
ledger.on('log::*', function(time, msg){
logger.on('log::*', function(time, msg){
//catchall for any logs //catchall for any logs
}); });


+ 36
- 135
lib/index.js View File

@ -2,33 +2,14 @@ var ee2 = require('eventemitter2').EventEmitter2;
var util = require('util'); var util = require('util');
var fs = require('fs'); var fs = require('fs');
var colors = require('colors'); var colors = require('colors');
var transactions = require('./transactions');
var ledger = function(options){
var ledger = function(options, trans){
options = (options)?options:{}; options = (options)?options:{};
this.useColor = (typeof options.useColor=='boolean')?options.useColor:true;
this.separator = (typeof options.separator=='string')?options.separator:' > ';
this.logStdout = (typeof options.logStdout=='boolean')?options.logStdout:true;
this.logFile = (typeof options.logFile=='string')?options.logFile:false;
this.logDb = (typeof options.logDb=='boolean')?options.logDb:false;
this.dbHost = (typeof options.dbHost=='string')?options.dbHost:'127.0.0.1';
this.dbPort = (options.dbPort)?options.dbPort:'27017';
this.dbName = (typeof options.dbName=='string')?options.dbName:'ledger';
this.dbCollection = (typeof options.dbCollection=='string')?options.dbCollection:'log';
this.dbUser = (typeof options.dbUser=='string')?options.dbUser:false;
this.dbPass = (typeof options.dbPass=='string')?options.dbPass:false;
this.dbConnectionString = 'mongo://';
if( this.dbUser ){
this.dbConnectionString += this.dbUser + ':' + this.dbPass + '@';
}
this.dbConnectionString += this.dbHost + ':' + this.dbPort + '/' + this.dbName;
this.transactions = (typeof trans === 'object')?trans: [];
this.separator = (typeof options.separator=='string')?options.separator:' - ';
this.timeFormatter = function(date){ this.timeFormatter = function(date){
return date.toString(); return date.toString();
}; };
@ -40,7 +21,6 @@ var ledger = function(options){
this.now = function(){ this.now = function(){
return this.timeFormatter( new Date() ).toString(); return this.timeFormatter( new Date() ).toString();
} }
ee2.call(this, { ee2.call(this, {
wildcard: true, wildcard: true,
@ -49,132 +29,53 @@ var ledger = function(options){
}; };
util.inherits(ledger,ee2); util.inherits(ledger,ee2);
module.exports = function( options ){
var logger = new ledger(options);
logger._stdout = function(msg){
process.stdout.write(msg);
};
logger._file = function(msg){
fs.open(logger.logFile, 'a+', function(err,fd){
fs.write(fd, msg, null, null, null, function(err,written,buffer){
fs.close(fd);
});
});
};
logger._db = function(msg, type){
var obj = {
time: logger.now(),
type: type,
message: msg,
timestamp: Math.round( new Date().getTime()/1000.0 )
}
var db = new (require('mongolian'))(logger.dbConnectionString, {log:false});
var dbLog = db.collection(logger.dbCollection);
dbLog.insert(obj, function(){
db.server.close();
});
};
logger._stderr = function(msg){
process.stderr.write(msg);
ledger.prototype._log = function(parts){
var msg = parts.join(this.separator);
for( var i in this.transactions ){
this.transactions[i].log( msg, parts );
} }
};
module.exports.createLogger = function( options, trans ){
var logger = new ledger(options, trans);
logger.log = function(msg){ logger.log = function(msg){
var now = logger.now();
msg = String(msg);
if(logger.logStdout){
logger._stdout( ((logger.useColor)?now.grey:now) +
logger.separator +
msg + '\r\n' );
}
if(logger.logFile){
logger._file(now + logger.separator + 'LOG' + logger.separator + msg + '\r\n');
}
if(logger.logDb){
logger._db(msg, 'log');
}
logger.emit('log::log', now, msg);
var parts = [logger.now(), 'LOG', String(msg)]
logger._log(parts);
logger.emit('log::log', String(msg), parts);
}; };
logger.info = function(msg){ logger.info = function(msg){
var now = logger.now();
msg = String(msg);
if(logger.logStdout){
logger._stdout( ((logger.useColor)?now.grey:now) +
logger.separator +
((logger.useColor)?msg.grey:msg) +
'\r\n' );
}
if(logger.logFile){
logger._file(now + logger.separator + 'INFO' + logger.separator + msg + '\r\n');
}
if(logger.logDb){
logger._db(msg, 'info');
}
logger.emit('log::info', now, msg);
var parts = [logger.now(), 'INFO', String(msg)]
logger._log(parts);
logger.emit('log::info', String(msg), parts);
}; };
logger.warn = function(msg){ logger.warn = function(msg){
var now = logger.now();
msg = String(msg);
if(logger.logStdout){
logger._stdout( ((logger.useColor)?now.grey:now) +
logger.separator +
((logger.useColor)?msg.yellow:msg) +
'\r\n' );
}
if(logger.logFile){
logger._file(now + logger.separator + 'WARN' + logger.separator + msg + '\r\n');
}
if(logger.logDb){
logger._db(msg, 'warn');
}
logger.emit('log::warn', now, msg);
var parts = [logger.now(), 'WARN', String(msg)]
logger._log(parts);
logger.emit('log::warn', String(msg), parts);
}; };
logger.error = function(msg){ logger.error = function(msg){
var now = logger.now();
msg = String(msg);
if(logger.logStdout){
logger._stdout( ((logger.useColor)?now.grey:now) +
logger.separator +
((logger.useColor)?msg.red:msg) +
'\r\n' );
}
if(logger.logFile){
logger._file(now + logger.separator + 'ERROR' + logger.separator + msg + '\r\n');
}
if(logger.logDb){
logger._db(msg, 'error');
}
logger.emit('log::error', now, msg);
var parts = [logger.now(), 'ERROR', String(msg)]
logger._log(parts);
logger.emit('log::error', String(msg), parts);
}; };
console.log = logger.log;
console.info = logger.info;
console.warn = logger.warn;
console.error = logger.error;
if( options.override !== false ){
console.log = logger.log;
console.info = logger.info;
console.warn = logger.warn;
console.error = logger.error;
}
return logger; return logger;
}; };
module.exports.transactions = transactions;

+ 10
- 0
lib/transaction/index.js View File

@ -0,0 +1,10 @@
var transaction = function(options){
this.options = (typeof options == 'object')?options:{};
};
transaction.prototype = {
log: function(msg,parts){
throw "Ledger Transaction log() Not Implemented"
},
};
module.exports = transaction;

+ 28
- 0
lib/transactions/file.js View File

@ -0,0 +1,28 @@
var util = require('util');
var transaction = require('../transaction');
var fs = require('fs');
var file = function(options){
transaction.call(this,options);
if( !(typeof this.options.logFile === 'string') ){
this.options.logFile = 'ledger.log';
}
};
util.inherits(file,transaction);
file.prototype = {
log: function(msg,parts){
if( typeof this.options.logFile === 'string'){
fs.open(this.options.logFile, 'a', function(err,fd){
if( err ) throw err;
fs.write( fd, msg+'\n', null, null, null, function(err){
if( err ) throw err;
fs.close(fd);
});
});
}
},
};
module.exports = file;

+ 3
- 0
lib/transactions/index.js View File

@ -0,0 +1,3 @@
module.exports = {
file: require('./file.js')
};

Loading…
Cancel
Save