Структурированное логирование и управление логами
В RUSEON Core в качестве движка логирования используется библиотека rs/zerolog. Zerolog обеспечивает быстрое JSON-логирование без лишних аллокаций памяти, что критично для стриминговых медиасерверов, где запись логов не должна создавать задержек при обработке видеокадров.
Форматы вывода логов
RUSEON Core поддерживает два формата вывода, настраиваемых через config.yaml или переменные окружения:
1. Production JSON формат (По умолчанию)
Генерирует структурированные записи NDJSON в stdout, готовые для отправки в Loki, Elasticsearch, Datadog и Fluentbit:
json
{"level":"info","time":"2026-08-14T14:26:32Z","camera_id":"cam_front","fps":25.0,"bitrate_kbps":4096,"message":"Stream ingestion synchronized"}
{"level":"warn","time":"2026-08-14T14:26:35Z","camera_id":"cam_front","subscriber_id":"webrtc_sub_92","message":"Slow consumer detected, skipping P-frame"}2. Консольный формат (Console Pretty)
Человекочитаемый цветной вывод для локальной разработки и интерактивной отладки:
text
2:26PM INF Stream ingestion synchronized camera_id=cam_front fps=25.0 bitrate_kbps=4096
2:26PM WRN Slow consumer detected, skipping P-frame camera_id=cam_front subscriber_id=webrtc_sub_92Поддерживаемые уровни логирования
| Уровень | Важность | Когда использовать |
|---|---|---|
trace | Минимальный | Парсинг каждого NAL-юнита, низкоуровневые аллокации пакетов |
debug | Низкий | Детали согласования RTSP, обмен SDP, обнаружение ключевых кадров |
info | Стандартный | Старт сервера, подключение/отключение камер, часовая ротация файлов |
warn | Средний | Сброс кадров из-за медленного подписчика, повтор RTSP-сокета, нехватка места |
error | Высокий | Ошибка записи на диск, повреждение файла базы данных, невалидный JWT |
fatal | Критический | Неустранимая ошибка, приводящая к аварийной остановке сервера |
Пример конфигурации
yaml
logging:
# Формат: "json" (production) или "console" (разработка)
format: "json"
# Минимальный уровень: trace, debug, info, warn, error
level: "info"
# Включение файла и номера строки в логи
caller: falseПереопределение через переменные окружения:
bash
export RUSEON_LOG_LEVEL=debug
export RUSEON_LOG_FORMAT=console