@wavequery/conductor
Version:
Modular LLM orchestration framework
109 lines • 3.38 kB
JavaScript
export var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
LogLevel[LogLevel["INFO"] = 1] = "INFO";
LogLevel[LogLevel["WARN"] = 2] = "WARN";
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
})(LogLevel || (LogLevel = {}));
export class Logger {
constructor(config) {
this.colors = {
debug: "\x1b[34m", // blue
info: "\x1b[32m", // green
warn: "\x1b[33m", // yellow
error: "\x1b[31m", // red
reset: "\x1b[0m",
};
this.config = {
enableTimestamp: true,
enableColors: true,
prefix: "",
customFormatter: undefined,
transport: undefined,
...config,
};
}
static getInstance(config) {
if (!Logger.instance) {
Logger.instance = new Logger(config || { level: LogLevel.INFO });
}
return Logger.instance;
}
debug(message, meta) {
this.log(LogLevel.DEBUG, message, meta);
}
info(message, meta) {
this.log(LogLevel.INFO, message, meta);
}
warn(message, meta) {
this.log(LogLevel.WARN, message, meta);
}
error(message, meta) {
this.log(LogLevel.ERROR, message, meta);
}
log(level, message, meta) {
if (level < this.config.level)
return;
const formattedMessage = this.config.customFormatter
? this.config.customFormatter(level, message, meta)
: this.formatMessage(level, message, meta);
if (this.config.transport) {
this.config.transport(level, formattedMessage, meta);
}
else {
this.defaultTransport(level, formattedMessage);
}
}
formatMessage(level, message, meta) {
const parts = [];
if (this.config.enableTimestamp) {
parts.push(`[${new Date().toISOString()}]`);
}
if (this.config.prefix) {
parts.push(`[${this.config.prefix}]`);
}
parts.push(`[${LogLevel[level]}]`);
parts.push(message);
if (meta) {
parts.push(JSON.stringify(meta, null, 2));
}
const finalMessage = parts.join(" ");
return this.config.enableColors
? this.colorize(level, finalMessage)
: finalMessage;
}
colorize(level, message) {
const color = this.getColorForLevel(level);
return `${color}${message}${this.colors.reset}`;
}
getColorForLevel(level) {
switch (level) {
case LogLevel.DEBUG:
return this.colors.debug;
case LogLevel.INFO:
return this.colors.info;
case LogLevel.WARN:
return this.colors.warn;
case LogLevel.ERROR:
return this.colors.error;
default:
return this.colors.reset;
}
}
defaultTransport(level, message) {
switch (level) {
case LogLevel.ERROR:
console.error(message);
break;
case LogLevel.WARN:
console.warn(message);
break;
case LogLevel.INFO:
console.info(message);
break;
default:
console.log(message);
}
}
}
//# sourceMappingURL=logger.js.map