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

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

Шаблоны для своих форматов

Как описать произвольную строку лога шаблоном с типизированными полями.

Шаблон — это строка, в которой текст сопоставляется буквально, а {имя:тип} извлекает поле. Шаблон компилируется в конечный автомат, а не в регулярное выражение, поэтому катастрофического отката на плохих данных нет.

js
const parser = createParser({
  pattern: '{ts:iso} {level:level} {service:word}: {msg:rest}'
});
parser.parseLine('2026-10-01T09:14:07Z ERROR db: connection reset');
// { ts: Date, level: 'error', fields: { service: 'db' }, msg: 'connection reset' }

Типы полей#

ТипЧто читаетРезультат
isoдата и время ISO 8601Date
leveltrace, debug, info, warn, error, fatal и частые синонимыстрока в нижнем регистре
int, floatчислаnumber
wordдо ближайшего пробеластрока
quotedтекст в двойных кавычкахстрока без кавычек
ipIPv4 или IPv6строка
restвсё до конца строкистрока

Поля с именами ts, level, msg попадают в одноимённые свойства записи, остальные — в rec.fields.

Необязательные части#

Знак ? после поля делает его необязательным вместе с пробелом перед ним:

text
{ts:iso} {level:level} {trace:word?} {msg:rest}

Строка 2026-10-01T09:14:07Z INFO started разберётся, а trace останется undefined.

Правила#

  1. rest допустим только в конце шаблона.
  2. Два соседних поля без разделителя между ними запрещены: непонятно, где кончается первое. Сверло сообщит об этом при создании разборщика.
  3. Литерал { пишется как {{.

Проверка шаблона

Прогоните десяток реальных строк через sverlo parse --pattern '...' --limit 10 и посмотрите на parser.errors. Шаблон, который проглатывает всё в rest, обычно скрывает ошибку в формате.

Дальше: как фильтровать полученные записи — язык запросов.

Обновлено: