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, trans){ options = (options)?options:{}; this.transactions = (typeof trans === 'object')?trans: []; this.separator = (typeof options.separator=='string')?options.separator:' - '; this.timeFormatter = function(date){ return date.toString(); }; if( typeof options.timeFormatter == 'function' ){ this.timeFormatter = options.timeFormatter; } this.now = function(){ return this.timeFormatter( new Date() ).toString(); } ee2.call(this, { wildcard: true, delimiter: '::' }); }; util.inherits(ledger,ee2); 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 parts = [logger.now(), 'LOG', String(msg)] logger._log(parts); logger.emit('log::log', String(msg), parts); }; logger.info = function(msg){ var parts = [logger.now(), 'INFO', String(msg)] logger._log(parts); logger.emit('log::info', String(msg), parts); }; logger.warn = function(msg){ var parts = [logger.now(), 'WARN', String(msg)] logger._log(parts); logger.emit('log::warn', String(msg), parts); }; logger.error = function(msg){ var parts = [logger.now(), 'ERROR', String(msg)] logger._log(parts); logger.emit('log::error', String(msg), parts); }; 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;