UNPKG

rsocket-rxjs

Version:
98 lines (97 loc) 3.11 kB
export var LogLevel; (function (LogLevel) { LogLevel[LogLevel["Trace"] = 0] = "Trace"; LogLevel[LogLevel["Debug"] = 1] = "Debug"; LogLevel[LogLevel["Info"] = 2] = "Info"; LogLevel[LogLevel["Warn"] = 3] = "Warn"; LogLevel[LogLevel["Error"] = 4] = "Error"; LogLevel[LogLevel["Never"] = 10] = "Never"; })(LogLevel || (LogLevel = {})); export var LogTarget; (function (LogTarget) { LogTarget[LogTarget["Console"] = 0] = "Console"; })(LogTarget || (LogTarget = {})); export class Logger { constructor(name) { this.name = name; this._level = LogLevel.Never; } debug(msg, error) { this.log(LogLevel.Debug, msg, error); } error(msg, error) { this.log(LogLevel.Error, msg, error); } info(msg, error) { this.log(LogLevel.Info, msg, error); } trace(msg, error) { this.log(LogLevel.Trace, msg, error); } warn(msg, error) { this.log(LogLevel.Warn, msg, error); } log(level, msg, error) { if (level >= this._level) { console.log(`LOG - '${new Date(Date.now()).toISOString()}' - ${this.levelToString(level)} [${this.name}] ${msg} ${error != undefined ? JSON.stringify(error) : ''}`); } } setLevel(level) { this._level = level; } levelToString(level) { switch (level) { case LogLevel.Debug: return 'DEBUG'; case LogLevel.Error: return 'ERROR'; case LogLevel.Info: return 'INFO'; case LogLevel.Trace: return 'TRACE'; case LogLevel.Warn: return 'WARN'; case LogLevel.Never: default: return 'WTF'; } } } export class LogFactory { constructor() { this._logger = []; this._levels = new Map(); } getLogger(name) { return this.createLogger(name); } setLevel(level, selector) { if (selector != undefined) { this._levels.set(selector, level); } else { const currentSelectors = this._levels.keys(); this._levels.clear(); for (let selector of currentSelectors) { this._levels.set(selector, level); } } this.updateLevels(); } createLogger(name) { const logger = new Logger(name); this._logger.push(logger); logger.setLevel(LogLevel.Info); this.updateLevels(); return logger; } updateLevels() { const currentSelectors = Array.from(this._levels.keys()).sort((a, b) => a.source.length - b.source.length); for (let selector of currentSelectors) { this._logger.filter(s => s.name.match(selector) != null).forEach(logger => logger.setLevel(this._levels.get(selector))); } } } export const factory = new LogFactory(); factory.setLevel(LogLevel.Warn, /^\.protocol/); factory.setLevel(LogLevel.Warn, /.*/);