logger.ts•1.67 kB
export class Logger {
private static instance: Logger;
private logLevel: 'debug' | 'info' | 'warn' | 'error' = 'info';
private mcpMode: boolean = false;
static getInstance(): Logger {
if (!Logger.instance) {
Logger.instance = new Logger();
}
return Logger.instance;
}
setLogLevel(level: 'debug' | 'info' | 'warn' | 'error'): void {
this.logLevel = level;
}
setMcpMode(enabled: boolean): void {
this.mcpMode = enabled;
}
private shouldLog(level: string): boolean {
const levels = ['debug', 'info', 'warn', 'error'];
const currentLevel = levels.indexOf(this.logLevel);
const messageLevel = levels.indexOf(level);
return messageLevel >= currentLevel;
}
private formatMessage(level: string, message: string, meta?: any): string {
const timestamp = new Date().toISOString();
const metaStr = meta ? ` ${JSON.stringify(meta)}` : '';
return `[${timestamp}] [${level.toUpperCase()}] ${message}${metaStr}`;
}
debug(message: string, meta?: any): void {
if (this.shouldLog('debug') && !this.mcpMode) {
console.debug(this.formatMessage('debug', message, meta));
}
}
info(message: string, meta?: any): void {
if (this.shouldLog('info') && !this.mcpMode) {
console.info(this.formatMessage('info', message, meta));
}
}
warn(message: string, meta?: any): void {
if (this.shouldLog('warn') && !this.mcpMode) {
console.warn(this.formatMessage('warn', message, meta));
}
}
error(message: string, meta?: any): void {
if (this.shouldLog('error') && !this.mcpMode) {
console.error(this.formatMessage('error', message, meta));
}
}
}