Applicability
When to Use
✓When debugging issues that span multiple services
✓When compliance requires centralized log retention
✓When you need to correlate events across systems
Overview
How It Works
This pattern wraps every MCP server call with logging middleware that captures the request, response, duration, and any errors. All logs flow through a centralized pipeline to Elasticsearch for indexing and Grafana for visualization.
The logging wrapper is transparent to the rest of the application. It captures structured log data including correlation IDs that allow tracing a single user request across multiple MCP server calls.
Implementation
Code Example
typescript
function withLogging(server, serverName) {
return new Proxy(server, {
get(target, tool) {
return async (...args) => {
const correlationId = getCorrelationId();
const start = Date.now();
const logEntry = { correlationId, server: serverName, tool, timestamp: new Date() };
try {
const result = await target[tool](...args);
logEntry.duration = Date.now() - start;
logEntry.status = "success";
await elasticsearch.index({ index: "mcp-logs", body: logEntry });
return result;
} catch (error) {
logEntry.duration = Date.now() - start;
logEntry.status = "error";
logEntry.error = error.message;
await elasticsearch.index({ index: "mcp-logs", body: logEntry });
throw error;
}
};
}
});
}
const loggedPostgres = withLogging(postgres, "postgres");
const loggedRedis = withLogging(redis, "redis");Quick Info
Categorymonitoring
ComplexityMedium