@nosana/kit
Version:
Nosana KIT
60 lines (59 loc) • 1.63 kB
JavaScript
export class Logger {
constructor(options) {
this.level = 'info';
this.prefix = '[Nosana]';
this.enabled = true;
if (options) {
this.level = options.level || this.level;
this.prefix = options.prefix || this.prefix;
this.enabled = options.enabled ?? this.enabled;
}
}
static getInstance(options) {
if (!Logger.instance) {
Logger.instance = new Logger(options);
}
return Logger.instance;
}
shouldLog(messageLevel) {
if (!this.enabled)
return false;
const levels = ['debug', 'info', 'warn', 'error'];
return levels.indexOf(messageLevel) >= levels.indexOf(this.level);
}
formatMessage(level, message) {
return `${this.prefix} [${level.toUpperCase()}] ${message}`;
}
debug(message) {
if (this.shouldLog('debug')) {
console.debug(this.formatMessage('debug', message));
}
}
info(message) {
if (this.shouldLog('info')) {
console.info(this.formatMessage('info', message));
}
}
warn(message) {
if (this.shouldLog('warn')) {
console.warn(this.formatMessage('warn', message));
}
}
error(message) {
if (this.shouldLog('error')) {
console.error(this.formatMessage('error', message));
}
}
setLevel(level) {
this.level = level;
}
setPrefix(prefix) {
this.prefix = prefix;
}
enable() {
this.enabled = true;
}
disable() {
this.enabled = false;
}
}