Перейти к содержимому
Разделы
ЯзыкRUEN

v2.1Руководство

Ошибки и битые строки

Режимы onError, коды ParseError и как не потерять строки, которые не удалось разобрать.

Реальный лог всегда содержит мусор: обрезанные строки, чужие сообщения, бинарные вставки. Сверло по умолчанию считает это нормой и не останавливает чтение.

Режимы onError#

ЗначениеПоведение
'skip' (по умолчанию)Строка пропускается, счётчик parser.stats.skipped растёт
'collect'Строка пропускается, а ParseError кладётся в parser.errors (не больше maxErrors, по умолчанию 1000)
'throw'Первая же ошибка бросает исключение
js
const parser = createParser({ format: 'logfmt', onError: 'collect', maxErrors: 50 });

Объект ParseError#

У ошибки есть стабильный code, по которому можно ветвиться, и контекст:

json
{
  "name": "ParseError",
  "code": "E_NO_MATCH",
  "line": 1042,
  "column": 18,
  "raw": "2026-10-01 09:14 ???",
  "message": "line 1042: expected {level:level} at column 18"
}
КодКогда возникает
E_NO_MATCHСтрока не подошла под формат или шаблон
E_BAD_TSВремя распознано, но не существует, например 31 ноября
E_LINE_TOO_LONGСтрока длиннее maxLineLength
E_QUERY_SYNTAXОшибка в запросе
E_PATTERNНеверный шаблон; бросается при создании разборщика

Не теряйте сырые строки#

Поле raw хранит исходный текст. Для разбора после инцидента удобно писать нераспознанное в отдельный файл:

js
import { appendFileSync } from 'node:fs';
for (const e of parser.errors) appendFileSync('unparsed.log', e.raw + '\n');

Доля ошибок как сигнал

Если parser.stats.skipped / parser.stats.lines вдруг выросла с нуля до нескольких процентов, чаще всего изменился формат лога после релиза приложения. Это проще заметить по счётчику, чем по пропавшим записям.

Обновлено: