cloudflare-image-mcp
Version:
Cloudflare Workers AI Image Generator MCP Server
144 lines âĸ 4.45 kB
JavaScript
export class Logger {
config;
isDebugMode;
levelOrder = {
error: 0,
warn: 1,
info: 2,
debug: 3
};
constructor(config) {
this.config = {
level: 'info',
enableTimestamps: true,
enableColors: true,
...config
};
// Determine debug mode from environment
this.isDebugMode = process.env.NODE_ENV === 'development' ||
this.config.level === 'debug';
// Auto-adjust level based on environment
if (this.isDebugMode && this.config.level === 'info') {
this.config.level = 'debug';
}
// Parse log level from environment if specified
const envLevel = process.env.LOG_LEVEL;
if (envLevel && this.isValidLogLevel(envLevel)) {
this.config.level = envLevel;
}
}
isValidLogLevel(level) {
return ['error', 'warn', 'info', 'debug'].includes(level);
}
shouldLog(level) {
return this.levelOrder[level] <= this.levelOrder[this.config.level];
}
formatMessage(level, message, ...args) {
const parts = [];
// Add timestamp
if (this.config.enableTimestamps) {
const timestamp = new Date().toISOString();
parts.push(`[${timestamp}]`);
}
// Add level
const levelEmoji = {
debug: 'đ',
info: 'âšī¸',
warn: 'â ī¸',
error: 'â'
};
parts.push(`${levelEmoji[level]}[${level.toUpperCase()}]`);
// Add prefix
if (this.config.prefix) {
parts.push(`[${this.config.prefix}]`);
}
// Add message
parts.push(message);
return [parts.join(' '), ...args];
}
log(level, message, ...args) {
if (!this.shouldLog(level)) {
return;
}
const [formattedMessage, ...formattedArgs] = this.formatMessage(level, message, ...args);
switch (level) {
case 'debug':
console.debug(formattedMessage, ...formattedArgs);
break;
case 'info':
console.info(formattedMessage, ...formattedArgs);
break;
case 'warn':
console.warn(formattedMessage, ...formattedArgs);
break;
case 'error':
console.error(formattedMessage, ...formattedArgs);
break;
}
}
// Main logging methods
debug(message, ...args) {
this.log('debug', message, ...args);
}
info(message, ...args) {
this.log('info', message, ...args);
}
warn(message, ...args) {
this.log('warn', message, ...args);
}
error(message, ...args) {
this.log('error', message, ...args);
}
rateLimit(message, ...args) {
this.warn(`đĻ ${message}`, ...args);
}
api(message, ...args) {
this.debug(`đ ${message}`, ...args);
}
storage(message, ...args) {
this.debug(`đž ${message}`, ...args);
}
// Conditional logging helpers
debugIf(condition, message, ...args) {
if (condition) {
this.debug(message, ...args);
}
}
logIf(condition, level, message, ...args) {
if (condition) {
this.log(level, message, ...args);
}
}
// Performance logging
time(label) {
if (this.shouldLog('debug')) {
console.time(`${this.config.prefix} ${label}`);
}
}
timeEnd(label) {
if (this.shouldLog('debug')) {
console.timeEnd(`${this.config.prefix} ${label}`);
}
}
// Create child logger with different prefix
child(prefix) {
return new Logger({
level: this.config.level,
enableTimestamps: this.config.enableTimestamps,
enableColors: this.config.enableColors,
prefix: this.config.prefix ? `${this.config.prefix}:${prefix}` : prefix
});
}
}
// Factory function for easy logger creation
export function createLogger(serviceName, config) {
return new Logger({
level: config?.level || 'info',
enableTimestamps: config?.enableTimestamps ?? true,
enableColors: config?.enableColors ?? true,
prefix: serviceName
});
}
// Default logger for general use
export const logger = new Logger();
//# sourceMappingURL=logger.js.map