From bb47de9f1dc3bbd74f10f907fbf1a102d2e8f6fe Mon Sep 17 00:00:00 2001 From: Brett Langdon Date: Mon, 30 Jul 2012 22:16:43 -0400 Subject: [PATCH] started prototype of version 0.2.0. added transactions, added basic file transaction, removed unneeded code from libindex.js, fixed example to continue working. --- .gitignore | 3 + example/index.js | 9 +- lib/index.js | 171 ++++++++------------------------------ lib/transaction/index.js | 10 +++ lib/transactions/file.js | 28 +++++++ lib/transactions/index.js | 3 + 6 files changed, 86 insertions(+), 138 deletions(-) create mode 100644 .gitignore create mode 100644 lib/transaction/index.js create mode 100644 lib/transactions/file.js create mode 100644 lib/transactions/index.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..550ce39 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +*~ +*#*# \ No newline at end of file diff --git a/example/index.js b/example/index.js index 7c1392b..2e3a268 100644 --- a/example/index.js +++ b/example/index.js @@ -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 }); -ledger.on('log::*', function(time, msg){ +logger.on('log::*', function(time, msg){ //catchall for any logs }); diff --git a/lib/index.js b/lib/index.js index 28b3a61..14f8116 100644 --- a/lib/index.js +++ b/lib/index.js @@ -2,33 +2,14 @@ var ee2 = require('eventemitter2').EventEmitter2; var util = require('util'); var fs = require('fs'); var colors = require('colors'); +var transactions = require('./transactions'); -var ledger = function(options){ +var ledger = function(options, trans){ 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){ return date.toString(); }; @@ -40,7 +21,6 @@ var ledger = function(options){ this.now = function(){ return this.timeFormatter( new Date() ).toString(); } - ee2.call(this, { wildcard: true, @@ -49,132 +29,53 @@ var ledger = function(options){ }; 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){ - 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){ - 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){ - 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){ - 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; }; + +module.exports.transactions = transactions; \ No newline at end of file diff --git a/lib/transaction/index.js b/lib/transaction/index.js new file mode 100644 index 0000000..9dfad3d --- /dev/null +++ b/lib/transaction/index.js @@ -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; \ No newline at end of file diff --git a/lib/transactions/file.js b/lib/transactions/file.js new file mode 100644 index 0000000..4d4cacc --- /dev/null +++ b/lib/transactions/file.js @@ -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; \ No newline at end of file diff --git a/lib/transactions/index.js b/lib/transactions/index.js new file mode 100644 index 0000000..70462e8 --- /dev/null +++ b/lib/transactions/index.js @@ -0,0 +1,3 @@ +module.exports = { + file: require('./file.js') +}; \ No newline at end of file