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

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

Многострочные записи

Как склеить стек-трейсы и другие продолжения в одну запись параметром multiline.

Исключение в Java или Node печатается на десятках строк, но по смыслу это одна запись. Параметр multiline задаёт правило, по которому строка считается продолжением предыдущей.

js
const parser = createParser({
  pattern: '{ts:iso} {level:level} {msg:rest}',
  multiline: { continuation: /^(\s+at |Caused by:|\.\.\. \d+ more)/ }
});

Все строки, подходящие под continuation, дописываются к rec.msg через перевод строки. Первая строка записи по-прежнему разбирается шаблоном.

Два способа описать границу#

ПараметрКогда использовать
continuationИзвестно, как выглядит продолжение: отступ, at , Caused by:
startИзвестно, как выглядит начало записи: например, дата в начале строки. Всё, что не подошло, приклеивается к предыдущей записи

Укажите один из двух. Если заданы оба, при создании разборщика будет ошибка E_PATTERN.

Лимиты#

Запись, которая растёт бесконечно, например лог без дат в начале строк, опасна для памяти. Поэтому действуют два предела:

  • multiline.maxLines — по умолчанию 200 строк в записи, остальное отбрасывается, а в rec.fields.truncated пишется true;
  • общий maxLineLength применяется к каждой строке отдельно.

Пример результата#

log
2026-10-01T09:14:07Z ERROR api: unhandled
    at handler (/srv/app.js:42:11)
    at next (/srv/router.js:7:3)
2026-10-01T09:14:08Z INFO api: ok

Из четырёх строк получатся две записи: у первой msg содержит три строки, у второй одну. Номер строки начала записи лежит в rec.line.

Порядок важен

Продолжение приклеивается только к предыдущей записи. Если файл начинается со строки продолжения, она пропускается с ошибкой E_NO_MATCH: приклеивать её не к чему.

Обновлено: