const debug = require('debug'); var ENABLE_STATE_LOG = true; var ENABLE_STATE_INFO = true; var ENABLE_STATE_DEBUG = true; var ENABLE_STATE_WARNING = true; var ENABLE_STATE_ERROR = true; var ENABLE_STATE_CRITICAL = true; var LOG_LIST = []; class Log { constructor(namespace){ this.__ns = namespace; this.__d = debug(namespace); this.__d.enabled = ENABLE_STATE_LOG; this.__fnc = null; this.__enabled = ENABLE_STATE_LOG; this.__ienabled = ENABLE_STATE_INFO; this.__denabled = ENABLE_STATE_DEBUG; this.__wenabled = ENABLE_STATE_WARNING; this.__eenabled = ENABLE_STATE_ERROR; this.__cenabled = ENABLE_STATE_CRITICAL; LOG_LIST.push(this); } get namespace(){return this.__ns;} get enabled(){return this.__enabled;} set enabled(e){this.__enabled = (e === true);} get infoEnabled(){return this.__ienabled;} set infoEnabled(e){this.__ienabled = (e === true);} get debugEnabled(){return this.__denabled;} set debugEnabled(e){this.__denabled = (e === true);} get warningEnabled(){return this.__wenabled;} set warningEnabled(e){this.__wenabled = (e === true);} get errorEnabled(){return this.__eenabled;} set errorEnabled(e){this.__eenabled = (e === true);} get criticalEnabled(){return this.__cenabled;} set criticalEnabled(e){this.__cenabled = (e === true);} set logFunc(f){ this.__fnc = f; this.__d.log = f; } log(){ if (!ENABLE_STATE_LOG || !this.__enabled || arguments.length < 2){return;} var type = arguments[0]; var args = Array.prototype.slice.call(arguments, 1); if (typeof(args[0]) !== 'string'){return;} switch(type){ case "d": if (!ENABLE_STATE_DEBUG || !this.__denabled){return;} args[0] = "[ DEBUG ]: " + args[0]; break; case "w": if (!ENABLE_STATE_WARNING || !this.__wenabled){return;} args[0] = "[ WARNING ]: " + args[0]; break; case "e": if (!ENABLE_STATE_ERROR || !this.__eenabled){return;} args[0] = "[ ERROR ]: " + args[0]; break; case "c": if (!ENABLE_STATE_CRITICAL || !this.__cenabled){return;} args[0] = "[ CRITICAL ]: " + args[0]; break; case "i": default: if (!ENABLE_STATE_INFO || !this.__ienabled){return;} args[0] = "[ INFO ]: " + args[0]; } this.__d.apply(this.__d, args); } info(){ let args = Array.prototype.slice.call(arguments); args.splice(0, 0, 'i'); this.log.apply(this, args); } debug(){ let args = (Array.prototype.slice(arguments)).splice(0, 0, 'd'); this.log.apply(this, args); } warning(){ let args = (Array.prototype.slice(arguments)).splice(0, 0, 'w'); this.log.apply(this, args); } error(){ let args = (Array.prototype.slice(arguments)).splice(0, 0, 'e'); this.log.apply(this, args); } critical(){ let args = (Array.prototype.slice(arguments)).splice(0, 0, 'c'); this.log.apply(this, args); } extend(ens){ var nlog = new LOG(this.__ns + ":" + ens); nlog.enabled = this.__enabled; nlog.infoEnabled = this.__ienabled; nlog.debugEnabled = this.__denabled; nlog.warningEnabled = this.__wenabled; nlog.errorEnabled = this.__eenabled; nlog.criticalEnabled = this.__cenabled; if (this.__fnc !== null) nlog.logFunc = this.__fnc; return nlog; } } module.exports = { Log:Log, enabled: function(){ if (arguments.length > 0) ENABLE_STATE_LOG = (arguments[0] === true); return ENABLE_STATE_LOG; }, infoEnabled: function(){ if (arguments.length > 0) ENABLE_STATE_INFO = (arguments[0] === true); return ENABLE_STATE_INFO; }, debugEnabled: function(){ if (arguments.length > 0) ENABLE_STATE_DEBUG = (arguments[0] === true); return ENABLE_STATE_DEBUG; }, warningEnabled: function(){ if (arguments.length > 0) ENABLE_STATE_WARNING = (arguments[0] === true); return ENABLE_STATE_WARNING; }, errorEnabled: function(){ if (arguments.length > 0) ENABLE_STATE_ERROR = (arguments[0] === true); return ENABLE_STATE_ERROR; }, criticalEnabled: function(){ if (arguments.length > 0) ENABLE_STATE_CRITICAL = (arguments[0] === true); return ENABLE_STATE_CRITICAL; } };