UNPKG

@splitsoftware/splitio-commons

Version:
112 lines (111 loc) 3.61 kB
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 };