JSON Output
Включение JSON-режима
Заголовок раздела «Включение JSON-режима»# Через флагnrz deploy --json
# Через переменную окруженияNRZ_JSON=1 nrz deployВ JSON-режиме все сообщения CLI выводятся в stdout как структурированные JSON-строки (по одной на строку). Human-readable вывод в stderr подавляется.
Формат Structured Log Lines
Заголовок раздела «Формат Structured Log Lines»В JSON-режиме каждая строка stdout — один JSON-объект:
{"s":"user","p":"install","l":"info","m":"Installing dependencies: npm install"}{"s":"debug","p":"install","l":"info","m":"npm warn deprecated inflight@1.0.6: This module is not supported"}{"s":"user","p":"build","l":"info","m":"webpack compiled successfully in 3.2s"}{"s":"user","p":"deploy","l":"info","m":"✓ Build completed"}| Ключ | Тип | Значения | Описание |
|---|---|---|---|
s | string | user, debug | Stream — user для пользователя, debug для внутреннего вывода |
p | string | auth, build, db, deploy, detect, domains, env, init, install, link, projects, rollback, workspace | Phase — текущая фаза операции |
l | string | info, warn, error | Level — уровень сообщения |
m | string | любой текст | Message — содержимое |
Потоки (stream)
Заголовок раздела «Потоки (stream)»user— сообщения для отображения пользователю: прогресс сборки, ошибки компиляции, webpack/vite outputdebug— внутренний вывод: npm warnings, npm audit, git internals, package manager noise
Примеры парсинга
Заголовок раздела «Примеры парсинга»Bash + jq
Заголовок раздела «Bash + jq»# Только user-сообщенияNRZ_JSON=1 nrz deploy 2>/dev/null | while IFS= read -r line; do stream=$(echo "$line" | jq -r '.s // empty') if [ "$stream" = "user" ]; then echo "$line" | jq -r '.m' fidone
# Фильтр одной командойNRZ_JSON=1 nrz deploy 2>/dev/null | jq -r 'select(.s=="user") | .m'
# Только ошибкиNRZ_JSON=1 nrz deploy 2>/dev/null | jq -r 'select(.l=="error") | .m'Node.js
Заголовок раздела «Node.js»import { spawn } from "node:child_process";import { createInterface } from "node:readline";
const child = spawn("nrz", ["deploy"], { env: { ...process.env, NRZ_JSON: "1" }, stdio: ["ignore", "pipe", "ignore"],});
const rl = createInterface({ input: child.stdout });
rl.on("line", (raw) => { try { const line = JSON.parse(raw); if (line.s === "user") { console.log(`[${line.p}] ${line.m}`); } } catch { // Final JSON output (deployment result) or non-log line console.log(raw); }});scanner := bufio.NewScanner(stdout)for scanner.Scan() { line := scanner.Text() if len(line) == 0 || line[0] != '{' { continue } var entry struct { Stream string `json:"s"` Phase string `json:"p"` Level string `json:"l"` Message string `json:"m"` } if err := json.Unmarshal([]byte(line), &entry); err != nil { continue } if entry.Stream == "user" { fmt.Printf("[%s] %s\n", entry.Phase, entry.Message) }}CI/CD Pipeline
Заголовок раздела «CI/CD Pipeline»# GitHub Actions- name: Deploy to ONREZA env: NRZ_TOKEN: ${{ secrets.ONREZA_TOKEN }} NRZ_JSON: "1" run: | nrz deploy --prod 2>/dev/null | jq -r 'select(.s=="user") | "[" + .p + "] " + .m'