feat(app): add interactive logger configuration and ownership transfer

This commit is contained in:
user
2026-07-21 15:24:00 +04:00
parent 569208c271
commit 1c109960eb
4 changed files with 250 additions and 13 deletions
+41 -2
View File
@@ -13,6 +13,9 @@ namespace app {
* LoggerWorker получает сообщения из MessageQueue и передаёт их
* в библиотеку Logger для записи в файл.
*
* Logger передаётся в worker по значению и перемещается внутрь объекта.
* LoggerWorker становится владельцем логгера.
*
* Объект Logger используется только внутри рабочего потока,
* поэтому потокобезопасность Logger не требуется.
*/
@@ -21,10 +24,12 @@ public:
/**
* @brief Создаёт worker для записи сообщений.
*
* Переданный Logger перемещается внутрь объекта LoggerWorker.
*
* @param logger Логгер, используемый для записи.
* @param queue Очередь сообщений.
*/
LoggerWorker(logger::Logger &logger, MessageQueue &queue);
LoggerWorker(logger::Logger logger, MessageQueue &queue);
/**
* @brief Останавливает поток записи.
@@ -44,11 +49,45 @@ public:
*/
LoggerWorker &operator=(const LoggerWorker &) = delete;
/**
* @brief Разрешает перемещение worker.
*
* Передаёт владение потоком записи и состоянием объекта.
*/
LoggerWorker(LoggerWorker &&) noexcept = default;
/**
* @brief Разрешает перемещающее присваивание worker.
*/
LoggerWorker &operator=(LoggerWorker &&) noexcept = default;
/**
* @brief Запускает поток записи сообщений.
*/
void start();
/**
* @brief Возвращает используемый логгер.
*
* Позволяет получить текущую конфигурацию логгера,
* например имя файла журнала или уровень логирования
* по умолчанию.
*
* @return Константная ссылка на логгер.
*/
[[nodiscard]]
const logger::Logger &getLogger() const;
/**
* @brief Устанавливает новый логгер.
*
* Новый Logger заменяет текущий.
* Переданный объект перемещается внутрь worker.
*
* @param logger Новый логгер.
*/
void setLogger(logger::Logger logger);
/**
* @brief Останавливает обработку сообщений.
*
@@ -70,7 +109,7 @@ private:
*
* Используется только рабочим потоком.
*/
logger::Logger &logger_;
logger::Logger logger_;
/**
* @brief Очередь входящих сообщений.