UniSet 2.32.1
Лог сервер

Лог сервер предназначен для возможности удалённого чтения логов (DebugStream). Ему указывается host и port на котором он отвечает, подключаться можно при помощи LogReader. Читающих клиентов может быть скольугодно много, на каждого создаётся своя "сессия"(LogSession). При этом через лог сервер имеется возможность управлять включением или отключением определённых уровней логов, записью, отключением записи или ротацией файла с логами. DebugStream за которым ведётся "слежение" задаётся в конструкторе для LogServer.

По умолчанию, при завершении ВСЕХ подключений, LogServer автоматически восстанавливает уровни логов, которые были на момент первого подключения. Но если была передана команда LogServerTypes::cmdSaveLogLevel (в любом из подключений), то будут сохранены те уровни, которые выставлены подключившимся клиентом. Для этого LogServer подключается к сигналу на получение команд у каждой сессии и сам обрабатывает команды, на сохранение, восстановление и показ текущих "умолчательных" логов.

LogServer logsrv(mylog);
...
logsrv.run(host,port,create_thread);
...
Definition DebugStream.h:62

При этом если необходимо управлять или читать сразу несколько логов можно воспользоваться специальным классом LogAgregator.

auto log1 = make_shared<DebugStream>();
log1->setLogName("log1");
auto log2 = make_shared<DebugStream>();
log2->setLogName("log2");
LogAgregator la;
la.add(log1);
la.add(log2);
LogServer logsrv(la);
...
logsrv.run(host,port,create_thread);
...
Предупреждения
Логи отдаются "клиентам" только целиком строкой. Т.е. по сети информация передаваться не будет пока не будет записан "endl". Это сделано для "оптимизации передачи" (чтобы не передавать каждый байт)
Т.к. LogServer в основном только отдаёт "клиентам" логи, то он реализован с использованием CommonEventLoop, т.е. у всех LogServer будет ОДИН ОБЩИЙ event loop.