@akala/core
Version:
68 lines • 2.38 kB
JavaScript
import * as debugImport from "debug";
import { LogLevels } from "../shared.js";
// Polyfill for debug import (browser vs non browser)
const debug = debugImport.default ?? debugImport.debug;
/**
* Debug-based implementation of ILoggerAdapter using debug package
* @implements ILogger
*/
// @logger.service('debug')
export class DebugLogger {
debugInstance;
currentLevel = LogLevels.info;
levelLoggers = new Map();
constructor(namespace) {
this.debugInstance = debug(namespace);
this.initializeLevelLoggers(namespace);
}
initializeLevelLoggers(namespace) {
Object.values(LogLevels).forEach(level => {
if (typeof level === 'number') {
const levelName = LogLevels[level];
this.levelLoggers.set(level, this.debugInstance.extend(levelName));
}
});
}
make(level) {
return new Proxy(this.levelLoggers.get(level), {
get: (target, prop) => {
if (prop === 'isEnabled') {
return this.isEnabled(level) && this.levelLoggers.get(level).enabled;
}
return target[prop];
}
});
}
get error() { return this.make(LogLevels.error); }
get warn() { return this.make(LogLevels.warn); }
get help() { return this.make(LogLevels.help); }
get data() { return this.make(LogLevels.data); }
get info() { return this.make(LogLevels.info); }
get debug() { return this.make(LogLevels.debug); }
get prompt() { return this.make(LogLevels.prompt); }
get verbose() { return this.make(LogLevels.verbose); }
get input() { return this.make(LogLevels.input); }
get silly() { return this.make(LogLevels.silly); }
isEnabled(level) {
return level >= this.currentLevel;
}
setLevel(level) {
this.currentLevel = level;
this.updateDebugNamespaces();
}
getLevel() {
return this.currentLevel;
}
updateDebugNamespaces() {
const namespaces = [];
Object.keys(LogLevels).forEach(key => {
if (!isNaN(Number(key)))
return;
if (LogLevels[key] <= this.currentLevel) {
namespaces.push(key + ':' + this.debugInstance.namespace);
}
});
debug.enable(namespaces.join(','));
}
}
//# sourceMappingURL=debug.js.map