elasticsearch-mcp
Version:
Secure MCP server for Elasticsearch integration with comprehensive tools and Elastic Cloud support
81 lines • 2.81 kB
JavaScript
;
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