@inso_web/els-mcp
Version:
MCP-сервер поверх INSO Error Logs Service. Read-only tools (search, analytics, fingerprinting, correlations) для подключения Claude Desktop/Code и ChatGPT к логам ошибок. Streamable HTTP transport + stdio для npx-запуска.
75 lines • 2.22 kB
JavaScript
import pino from 'pino';
const REDACT_PATHS = [
'req.headers.authorization',
'req.headers.cookie',
'req.headers["x-api-key"]',
'res.headers["set-cookie"]',
'*.password',
'*.token',
'*.apiKey',
'*.secret',
'ctx.elsApiKey',
'elsApiKey',
];
let _logger = null;
export function createLogger(cfg = {}) {
const level = cfg.level ?? process.env.MCP_LOG_LEVEL ?? 'info';
const pretty = cfg.pretty ??
(process.env.NODE_ENV !== 'production' && process.env.MCP_LOG_PRETTY !== 'false');
const baseOpts = {
level,
base: {
service: cfg.service ?? 'els-mcp',
version: cfg.version ?? process.env.GIT_SHA ?? process.env.npm_package_version ?? null,
pod: cfg.pod ?? process.env.HOSTNAME ?? null,
},
redact: {
paths: REDACT_PATHS,
censor: '<REDACTED>',
},
timestamp: pino.stdTimeFunctions.isoTime,
formatters: {
level(label) {
return { level: label };
},
},
};
let dest;
if (pretty) {
try {
// pino-pretty подключаем через transport, чтобы не блокировать event-loop
return pino({
...baseOpts,
transport: {
target: 'pino-pretty',
options: {
destination: 2,
colorize: true,
translateTime: 'SYS:HH:MM:ss.l',
ignore: 'pid,hostname',
},
},
});
}
catch {
// pino-pretty не установлен — fallback на JSON в stderr
}
}
// Production / fallback: JSON в stderr
dest = pino.destination({ dest: 2, sync: false });
return pino(baseOpts, dest);
}
/** Singleton accessor. */
export function getLogger() {
if (!_logger) {
_logger = createLogger();
}
return _logger;
}
export function setLogger(logger) {
_logger = logger;
}
export function withRequestContext(logger, fields) {
return logger.child(fields);
}
//# sourceMappingURL=logger.js.map