UNPKG

elasticsearch-mcp

Version:

Secure MCP server for Elasticsearch integration with comprehensive tools and Elastic Cloud support

81 lines 2.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Logger = exports.LogLevel = void 0; var LogLevel; (function (LogLevel) { LogLevel[LogLevel["ERROR"] = 0] = "ERROR"; LogLevel[LogLevel["WARN"] = 1] = "WARN"; LogLevel[LogLevel["INFO"] = 2] = "INFO"; LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG"; })(LogLevel || (exports.LogLevel = LogLevel = {})); class Logger { level; format; constructor(level = 'info', format = 'text') { this.level = LogLevel[level.toUpperCase()]; this.format = format; } shouldLog(level) { return level <= this.level; } formatMessage(entry) { if (this.format === 'json') { return JSON.stringify(entry); } const { timestamp, level, message, context, error } = entry; let output = `[${timestamp}] ${level.toUpperCase()}: ${message}`; if (context && Object.keys(context).length > 0) { output += ` ${JSON.stringify(context)}`; } if (error) { output += `\nError: ${error.name}: ${error.message}`; if (error.stack) { output += `\n${error.stack}`; } } return output; } log(level, levelName, message, context, error) { if (!this.shouldLog(level)) { return; } const entry = { timestamp: new Date().toISOString(), level: levelName, message, context, error: error ? { name: error.name, message: error.message, ...(error.stack && { stack: error.stack }), } : undefined, }; const output = this.formatMessage(entry); // Write to stderr only (MCP uses stdout for protocol communication) process.stderr.write(output + '\n'); } error(message, context, error) { this.log(LogLevel.ERROR, 'error', message, context, error); } warn(message, context) { this.log(LogLevel.WARN, 'warn', message, context); } info(message, context) { this.log(LogLevel.INFO, 'info', message, context); } debug(message, context) { this.log(LogLevel.DEBUG, 'debug', message, context); } child(context) { const childLogger = new Logger(Object.keys(LogLevel)[this.level], this.format); const originalLog = childLogger.log.bind(childLogger); const boundLog = (level, levelName, message, messageContext, error) => { const mergedContext = { ...context, ...messageContext }; originalLog(level, levelName, message, mergedContext, error); }; childLogger.log = boundLog; return childLogger; } } exports.Logger = Logger; //# sourceMappingURL=logger.js.map