@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
117 lines (116 loc) • 3.94 kB
JavaScript
;
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;