v2.1API
Запись (Record)
Структура объекта записи, который возвращают parseLine и stream, и правила для отсутствующих полей.
Каждая успешно разобранная строка превращается в обычный объект. Он не привязан к разборщику, его можно сериализовать и передавать дальше.
interface Record {
ts: Date | null;
level: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal' | null;
msg: string;
fields: { [name: string]: string | number | boolean | null };
raw: string;
line: number;
}Поля#
| Поле | Описание |
|---|---|
ts | Момент времени как Date; null, если в формате нет времени |
level | Нормализованный уровень; синонимы warning, err, crit приводятся к стандартным |
msg | Текст сообщения; для многострочных записей содержит переводы строки |
fields | Остальные извлечённые значения |
raw | Исходный текст строки (у многострочной записи — всех строк) |
line | Номер первой строки записи, считая с единицы |
Правила#
- Свойства
ts,level,msg,fields,raw,lineесть у каждой записи. Отсутствующее значение —nullили пустая строка, но неundefined. - Объект
fieldsсоздан без прототипа, поэтому ключ с именем__proto__в логе безопасен и обычное свойство. - Поля шаблона с типом
intиfloatвсегдаnumber, при невозможности разобрать строка отбрасывается сE_NO_MATCH.
Сериализация#
console.log(JSON.stringify(rec));
// {"ts":"2026-10-01T09:14:07.000Z","level":"error","msg":"connection reset","fields":{"attempt":3},"raw":"...","line":1}Date превращается в строку ISO 8601 стандартным способом. Чтобы не хранить дубликат текста, удалите raw перед записью: const { raw, ...slim } = rec.
Сравнение уровней
Для порядка уровней используйте sverlo.levelRank(rec.level): функция возвращает число от 0 (trace) до 5 (fatal) и -1 для null.