var LoggerSystem = require('./system'); var LogWriter = require('./writer'); var LogAdapter = require('./adapter'); var util = require('util'); var Logger = class Logger { constructor(name) { this.name = name; this.lastTime = process.hrtime(); this.count = 0; } base(LVL,args) { var msg = args.map(a => (typeof(a) == "object")? util.inspect(a):a).join(" "); this.sys.base(this,LVL,msg); this.lastTime = process.hrtime(); this.count++; } info(...args) { this.base(Logger.INFO,args); } error(...args) { this.base(Logger.ERROR,args); } warn(...args) { this.base(Logger.WARN,args); } verb(...args) { this.base(Logger.VERBOSE,args); } } Logger.root = new LoggerSystem(); // statics Logger.createLogger = function (name) { var logger = new Logger(name); logger.sys = Logger.root; return logger; } // By order of importance //Logger.logTags = ["ERROR","WARN","INFO","VERBOSE"]; for( var i in LoggerSystem.TAGS) { Logger[LoggerSystem.TAGS[i]] = i; } // Filter functions // // Logger.le = function(TAG) { return function(itag) { return itag <= TAG; } } Logger.ge = function(TAG) { return function(itag) { return itag <= TAG; } } Logger.eq = function(TAG) { return function(itag) { return itag == TAG; } }; Logger.in = function(args) { return function(itag) { var TAGS = args; return TAGS.indexOf(itag) >= 0; } } Logger.reset = function reset() { Logger.root.adapters = []; } Logger.setup = function (conf) { var writerInst = []; Logger.root.loggerLevels = conf.loggers; conf.adapters.forEach(function(ad) { var adapterWriter = []; ad.writers.forEach(function(e) { // Writer selection // Use same or create new, should be stored in Logger somehow if(conf.writers[e] == undefined) { throw new Error ("Adapter requested an inexistent writer: '" + e + "'"); } if(Logger.root.writers[conf.writers[e].writer] == undefined) { throw new Error ("Requested writer: '" + conf.writers[e].writer + "' does not exists in context"); } if(writerInst[e] == undefined) { writerInst[e] = new Logger.root.writers[conf.writers[e].writer](conf.writers[e].opts); } if(writerInst[e] != undefined) { adapterWriter.push( writerInst[e]); }; }) var levels = []; ad.levels.forEach(function(e) { levels.push(Logger[e]); }); var adapter = new LogAdapter(Logger.in(levels),adapterWriter,ad.fmt); adapter.loggerLevels = ad.loggers; Logger.root.adapter(adapter); }) } module.exports = Logger;