@ -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 ;