UNPKG

@nosana/kit

Version:

Nosana KIT

98 lines 2.96 kB
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 || this.level === 'none') return false; // Levels ordered from most verbose (trace) to least verbose (fatal) const levels = [ 'trace', 'debug', 'info', 'warn', 'error', 'fatal', ]; const currentLevelIndex = levels.indexOf(this.level); const messageLevelIndex = levels.indexOf(messageLevel); return messageLevelIndex >= currentLevelIndex; } formatMessage(level, message) { return `${this.prefix} [${level.toUpperCase()}] ${message}`; } trace(message) { if (this.shouldLog('trace')) { // eslint-disable-next-line no-console console.trace(this.formatMessage('trace', 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)); } } fatal(message) { if (this.shouldLog('fatal')) { console.error(this.formatMessage('fatal', message)); } } // eslint-disable-next-line @typescript-eslint/no-explicit-any child(bindings) { // Create a new logger instance with modified prefix const childLogger = new Logger({ level: this.level, prefix: this.prefix, enabled: this.enabled, }); // Add bindings to the prefix if provided if (Object.keys(bindings).length > 0) { const bindingString = Object.entries(bindings) .map(([key, value]) => `${key}=${value}`) .join(' '); childLogger.prefix = `${this.prefix} [${bindingString}]`; } return childLogger; } setLevel(level) { this.level = level; } setPrefix(prefix) { this.prefix = prefix; } enable() { this.enabled = true; } disable() { this.enabled = false; } } //# sourceMappingURL=Logger.js.map