v2.1Руководство
Язык запросов
Синтаксис коротких запросов для фильтрации записей: сравнения, подстроки, AND, OR и NOT.
Запрос — это строка, которая превращается в функцию (rec) => boolean. Парсер запроса написан вручную, ничего не вычисляет через eval и не выполняет код из строки.
const isProblem = parser.query('level>=warn AND NOT msg~"health"');Операторы#
| Оператор | Смысл | Пример |
|---|---|---|
: | равно | status:404, method:GET |
> >= < <= | сравнение чисел, уровней и дат | bytes>1000000, level>=warn |
~ | содержит подстроку без учёта регистра | msg~"timeout" |
:5xx | маска класса статуса | status:5xx |
AND OR NOT | логика, скобки разрешены | (a OR b) AND NOT c |
Два условия подряд без слова между ними означают AND: level>=warn status:5xx.
Что можно сравнивать#
- Имена
ts,level,msgотносятся к записи, остальные ищутся вrec.fields. - Уровни упорядочены:
trace < debug < info < warn < error < fatal. - Даты принимаются в виде
2026-10-01или2026-10-01T09:00:00Z. Записьts>2026-10-01сравнивает с полуночью UTC. - Если поля в записи нет, условие ложно, а не ошибка. Исключение —
NOT:NOT status:200истинно для записи безstatus.
Примеры#
level>=error
status:5xx AND path~"/api/"
ts>2026-10-01T09:00:00Z AND ts<2026-10-01T10:00:00Z
(service:db OR service:cache) AND level>=warnОшибки в запросе#
Неверный запрос бросает ParseError с кодом E_QUERY_SYNTAX и позицией символа. Запрос проверяется один раз при компиляции, а не на каждой записи.
Строки в кавычках
Значение с пробелом берите в двойные кавычки: msg~"connection reset". Одинарные кавычки не поддерживаются, чтобы запрос без изменений работал внутри shell-команды в одинарных кавычках.