// Logging utility for Ultimate Elementor MCP
export enum LogLevel {
DEBUG = 0,
INFO = 1,
WARN = 2,
ERROR = 3,
}
export interface LogConfig {
level: LogLevel;
enableRequestLogging: boolean;
enablePerformanceLogging: boolean;
enableDebugMode: boolean;
}
class Logger {
private config: LogConfig;
constructor(config?: Partial<LogConfig>) {
this.config = {
level: LogLevel.INFO,
enableRequestLogging: true,
enablePerformanceLogging: true,
enableDebugMode: process.env.DEBUG_MODE === 'true',
...config,
};
}
private shouldLog(level: LogLevel): boolean {
return level >= this.config.level;
}
private formatMessage(level: string, message: string, meta?: any): string {
const timestamp = new Date().toISOString();
const metaStr = meta ? ` | ${JSON.stringify(meta)}` : '';
return `[${timestamp}] [${level}] ${message}${metaStr}`;
}
debug(message: string, meta?: any): void {
if (this.shouldLog(LogLevel.DEBUG) && this.config.enableDebugMode) {
console.error(this.formatMessage('DEBUG', message, meta));
}
}
info(message: string, meta?: any): void {
if (this.shouldLog(LogLevel.INFO)) {
console.error(this.formatMessage('INFO', message, meta));
}
}
warn(message: string, meta?: any): void {
if (this.shouldLog(LogLevel.WARN)) {
console.error(this.formatMessage('WARN', message, meta));
}
}
error(message: string, error?: Error | any, meta?: any): void {
if (this.shouldLog(LogLevel.ERROR)) {
const errorInfo = error instanceof Error
? { name: error.name, message: error.message, stack: error.stack }
: error;
console.error(this.formatMessage('ERROR', message, { ...meta, error: errorInfo }));
}
}
request(method: string, url: string, meta?: any): void {
if (this.config.enableRequestLogging) {
this.info(`${method} ${url}`, meta);
}
}
performance(operation: string, duration: number, meta?: any): void {
if (this.config.enablePerformanceLogging) {
this.debug(`${operation} completed in ${duration}ms`, meta);
}
}
setLevel(level: LogLevel): void {
this.config.level = level;
}
setDebugMode(enabled: boolean): void {
this.config.enableDebugMode = enabled;
}
}
// Export singleton instance
export const logger = new Logger();
// Export factory function for custom loggers
export function createLogger(config?: Partial<LogConfig>): Logger {
return new Logger(config);
}