|
// retoor <retoor@molodetz.nl>
|
|
|
|
const LogLevel = {
|
|
DEBUG: 0,
|
|
INFO: 1,
|
|
WARN: 2,
|
|
ERROR: 3,
|
|
};
|
|
|
|
class Logger {
|
|
constructor(name, level = LogLevel.DEBUG) {
|
|
this.name = name;
|
|
this.level = level;
|
|
this.enabled = true;
|
|
}
|
|
|
|
_format(level, message, data) {
|
|
const timestamp = new Date().toISOString();
|
|
const prefix = `[${timestamp}] [${level}] [${this.name}]`;
|
|
return { prefix, message, data };
|
|
}
|
|
|
|
_log(level, levelName, message, data) {
|
|
if (!this.enabled || level < this.level) return;
|
|
const { prefix } = this._format(levelName, message, data);
|
|
const logFn = level === LogLevel.ERROR ? console.error :
|
|
level === LogLevel.WARN ? console.warn :
|
|
level === LogLevel.INFO ? console.info : console.debug;
|
|
if (data !== undefined) {
|
|
logFn(`${prefix} ${message}`, data);
|
|
} else {
|
|
logFn(`${prefix} ${message}`);
|
|
}
|
|
}
|
|
|
|
debug(message, data) {
|
|
this._log(LogLevel.DEBUG, "DEBUG", message, data);
|
|
}
|
|
|
|
info(message, data) {
|
|
this._log(LogLevel.INFO, "INFO", message, data);
|
|
}
|
|
|
|
warn(message, data) {
|
|
this._log(LogLevel.WARN, "WARN", message, data);
|
|
}
|
|
|
|
error(message, data) {
|
|
this._log(LogLevel.ERROR, "ERROR", message, data);
|
|
}
|
|
|
|
setLevel(level) {
|
|
this.level = level;
|
|
}
|
|
|
|
enable() {
|
|
this.enabled = true;
|
|
}
|
|
|
|
disable() {
|
|
this.enabled = false;
|
|
}
|
|
}
|
|
|
|
class LoggerFactory {
|
|
constructor() {
|
|
this.loggers = new Map();
|
|
this.globalLevel = LogLevel.DEBUG;
|
|
this.globalEnabled = true;
|
|
}
|
|
|
|
getLogger(name) {
|
|
if (!this.loggers.has(name)) {
|
|
const logger = new Logger(name, this.globalLevel);
|
|
logger.enabled = this.globalEnabled;
|
|
this.loggers.set(name, logger);
|
|
}
|
|
return this.loggers.get(name);
|
|
}
|
|
|
|
setGlobalLevel(level) {
|
|
this.globalLevel = level;
|
|
this.loggers.forEach((logger) => logger.setLevel(level));
|
|
}
|
|
|
|
enableAll() {
|
|
this.globalEnabled = true;
|
|
this.loggers.forEach((logger) => logger.enable());
|
|
}
|
|
|
|
disableAll() {
|
|
this.globalEnabled = false;
|
|
this.loggers.forEach((logger) => logger.disable());
|
|
}
|
|
}
|
|
|
|
export const loggerFactory = new LoggerFactory();
|
|
export { Logger, LogLevel };
|