UNPKG

@splitsoftware/splitio-commons

Version:
117 lines (116 loc) 3.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Logger = exports._sprintf = exports.isLogLevelString = exports.DEFAULT_LOGGER = exports.LogLevels = void 0; var objectAssign_1 = require("../utils/lang/objectAssign"); var lang_1 = require("../utils/lang"); var commons_1 = require("../utils/settingsValidation/logger/commons"); exports.LogLevels = { DEBUG: 'DEBUG', INFO: 'INFO', WARN: 'WARN', ERROR: 'ERROR', NONE: 'NONE' }; var LogLevelIndexes = { DEBUG: 1, INFO: 2, WARN: 3, ERROR: 4, NONE: 5 }; exports.DEFAULT_LOGGER = { debug: function (msg) { console.log('[DEBUG] ' + msg); }, info: function (msg) { console.log('[INFO] ' + msg); }, warn: function (msg) { console.log('[WARN] ' + msg); }, error: function (msg) { console.log('[ERROR] ' + msg); } }; function isLogLevelString(str) { return !!(0, lang_1.find)(exports.LogLevels, function (lvl) { return str === lvl; }); } exports.isLogLevelString = isLogLevelString; // exported for testing purposes only function _sprintf(format, args) { if (format === void 0) { format = ''; } if (args === void 0) { args = []; } var i = 0; return format.replace(/%s/g, function () { var arg = args[i++]; if ((0, lang_1.isObject)(arg) || Array.isArray(arg)) { try { arg = JSON.stringify(arg); } catch (e) { /* empty */ } } return arg; }); } exports._sprintf = _sprintf; var defaultOptions = { prefix: 'splitio', logLevel: exports.LogLevels.NONE, }; var Logger = /** @class */ (function () { function Logger(options, codes) { this.options = (0, objectAssign_1.objectAssign)({}, defaultOptions, options); this.codes = codes || new Map(); this.logLevel = LogLevelIndexes[this.options.logLevel]; } Logger.prototype.setLogLevel = function (logLevel) { this.options.logLevel = logLevel; this.logLevel = LogLevelIndexes[logLevel]; }; Logger.prototype.setLogger = function (logger) { if (logger) { if ((0, commons_1.isLogger)(logger)) { this.logger = logger; return; } else { this.error('Invalid `logger` instance. It must be an object with `debug`, `info`, `warn` and `error` methods. Defaulting to `console.log`'); } } // unset this.logger = undefined; }; Logger.prototype.debug = function (msg, args) { if (this._shouldLog(LogLevelIndexes.DEBUG)) this._log('debug', msg, args); }; Logger.prototype.info = function (msg, args) { if (this._shouldLog(LogLevelIndexes.INFO)) this._log('info', msg, args); }; Logger.prototype.warn = function (msg, args) { if (this._shouldLog(LogLevelIndexes.WARN)) this._log('warn', msg, args); }; Logger.prototype.error = function (msg, args) { if (this._shouldLog(LogLevelIndexes.ERROR)) this._log('error', msg, args); }; Logger.prototype._log = function (method, msg, args) { if (typeof msg === 'number') { var format = this.codes.get(msg); msg = format ? _sprintf(format, args) : "Message code ".concat(msg).concat(args ? ', with args: ' + args.toString() : ''); } else { if (args) msg = _sprintf(msg, args); } if (this.options.prefix) msg = this.options.prefix + ' => ' + msg; if (this.logger) { try { this.logger[method](msg); return; } catch (e) { /* empty */ } } exports.DEFAULT_LOGGER[method](msg); }; Logger.prototype._shouldLog = function (level) { return level >= this.logLevel; }; return Logger; }()); exports.Logger = Logger;