@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
112 lines (111 loc) • 3.61 kB
JavaScript
import { objectAssign } from '../utils/lang/objectAssign';
import { find, isObject } from '../utils/lang';
import { isLogger } from '../utils/settingsValidation/logger/commons';
export var LogLevels = {
DEBUG: 'DEBUG',
INFO: 'INFO',
WARN: 'WARN',
ERROR: 'ERROR',
NONE: 'NONE'
};
var LogLevelIndexes = {
DEBUG: 1,
INFO: 2,
WARN: 3,
ERROR: 4,
NONE: 5
};
export var 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); }
};
export function isLogLevelString(str) {
return !!find(LogLevels, function (lvl) { return str === lvl; });
}
// exported for testing purposes only
export 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 (isObject(arg) || Array.isArray(arg)) {
try {
arg = JSON.stringify(arg);
}
catch (e) { /* empty */ }
}
return arg;
});
}
var defaultOptions = {
prefix: 'splitio',
logLevel: LogLevels.NONE,
};
var Logger = /** @class */ (function () {
function Logger(options, codes) {
this.options = 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 (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 */ }
}
DEFAULT_LOGGER[method](msg);
};
Logger.prototype._shouldLog = function (level) {
return level >= this.logLevel;
};
return Logger;
}());
export { Logger };