UNPKG

@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
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