@nosana/kit
Version:
Nosana KIT
98 lines • 2.96 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 || 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