UNPKG

@splitsoftware/splitio-commons

Version:
101 lines (100 loc) 3.42 kB
"use strict"; 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;