v2.1Руководство
Шаблоны для своих форматов
Как описать произвольную строку лога шаблоном с типизированными полями.
Шаблон — это строка, в которой текст сопоставляется буквально, а {имя:тип} извлекает поле. Шаблон компилируется в конечный автомат, а не в регулярное выражение, поэтому катастрофического отката на плохих данных нет.
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 8601 | Date |
level | trace, debug, info, warn, error, fatal и частые синонимы | строка в нижнем регистре |
int, float | числа | number |
word | до ближайшего пробела | строка |
quoted | текст в двойных кавычках | строка без кавычек |
ip | IPv4 или IPv6 | строка |
rest | всё до конца строки | строка |
Поля с именами ts, level, msg попадают в одноимённые свойства записи, остальные — в rec.fields.
Необязательные части#
Знак ? после поля делает его необязательным вместе с пробелом перед ним:
{ts:iso} {level:level} {trace:word?} {msg:rest}Строка 2026-10-01T09:14:07Z INFO started разберётся, а trace останется undefined.
Правила#
restдопустим только в конце шаблона.- Два соседних поля без разделителя между ними запрещены: непонятно, где кончается первое. Сверло сообщит об этом при создании разборщика.
- Литерал
{пишется как{{.
Проверка шаблона
Прогоните десяток реальных строк через sverlo parse --pattern '...' --limit 10 и посмотрите на parser.errors. Шаблон, который проглатывает всё в rest, обычно скрывает ошибку в формате.
Дальше: как фильтровать полученные записи — язык запросов.