rsocket-rxjs
Version:
RSocket Protocol Client Implementation
98 lines (97 loc) • 3.11 kB
JavaScript
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, /.*/);