Metalog — логирование
Логер Metarhia: уровни, файловые провайдеры, ротация, форматирование, Redis-провайдер для тестов.
Что это
Базовый компонент стека. Везде, где пишутся логи (Impress, Metacom, бизнес-логика), используется metalog. Совместим по интерфейсу с console.
Уровни
log— обычныйinfo,warn,error,debug- Все методы пишут с метаданными: timestamp, workerId, уровень.
Провайдеры
logger-fs— пишет в файл с ротацией.logger-console— в stdout.logger-redis— для тестов (быстро прочитать что насыпалось).- Любой провайдер пишется руками — реализуй интерфейс.
Префикс logger- для имён файлов провайдеров.
Структурированные ошибки
log.error(new Error('cannot open file', { cause: err }));
Внутри metalog ошибки превращаются в plain-объект через Error.toString() → можно сериализовать в JSON и записать.
Multi-thread
Поле workerId (или logId/logWorkerId) — какой воркер написал лог. В Impress с многопоточностью это важно для траблшутинга.
Метаданные
Логер добавляет:
timestamp(точное время)pidпроцессаworkerIdтредаlevel- источник записи (если настроено)
Конфигурация
log: {
path: './log',
workers: 4,
writeInterval: 3000,
writeBuffer: 64 * 1024,
keepDays: 30,
}
- Буферизация записи (батчинг).
- Лимит дней — старые файлы удаляются.
🎓 Источники
- 🎓 Летняя школа 2022 #21 — Ревью и рефакторинг metalog и metacom · 2022-08-26
- 🎓 Летняя школа 2022 #14 — ревью metacalc, логгер metalog, события в metacom
- 🎓 Летняя школа 2022 #19 — декомпозиция логера, metavm для браузера · 2022-08-24
- 🎓 Логирование на Node.js и JavaScript · 2019-04-25