@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
101 lines (100 loc) • 3.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = exports._sprintf = exports.isLogLevelString = exports.LogLevels = void 0;
var objectAssign_1 = require("../utils/lang/objectAssign");
var lang_1 = require("../utils/lang");
exports.LogLevels = {
DEBUG: 'DEBUG',
INFO: 'INFO',
WARN: 'WARN',
ERROR: 'ERROR',
NONE: 'NONE'
};
var LogLevelIndexes = {
DEBUG: 1,
INFO: 2,
WARN: 3,
ERROR: 4,
NONE: 5
};
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,
showLevel: true,
};
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.debug = function (msg, args) {
if (this._shouldLog(LogLevelIndexes.DEBUG))
this._log(exports.LogLevels.DEBUG, msg, args);
};
Logger.prototype.info = function (msg, args) {
if (this._shouldLog(LogLevelIndexes.INFO))
this._log(exports.LogLevels.INFO, msg, args);
};
Logger.prototype.warn = function (msg, args) {
if (this._shouldLog(LogLevelIndexes.WARN))
this._log(exports.LogLevels.WARN, msg, args);
};
Logger.prototype.error = function (msg, args) {
if (this._shouldLog(LogLevelIndexes.ERROR))
this._log(exports.LogLevels.ERROR, msg, args);
};
Logger.prototype._log = function (level, msg, args) {
if (typeof msg === 'number') {
var format = this.codes.get(msg);
msg = format ? _sprintf(format, args) : "Message code " + msg + (args ? ', with args: ' + args.toString() : '');
}
else {
if (args)
msg = _sprintf(msg, args);
}
var formattedText = this._generateLogMessage(level, msg);
console.log(formattedText);
};
Logger.prototype._generateLogMessage = function (level, text) {
var textPre = ' => ';
var result = '';
if (this.options.showLevel) {
result += '[' + level + ']' + (level === exports.LogLevels.INFO || level === exports.LogLevels.WARN ? ' ' : '') + ' ';
}
if (this.options.prefix) {
result += this.options.prefix + textPre;
}
return result += text;
};
Logger.prototype._shouldLog = function (level) {
return level >= this.logLevel;
};
return Logger;
}());
exports.Logger = Logger;