feat(app): add interactive logger configuration and ownership transfer
This commit is contained in:
@@ -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 Очередь входящих сообщений.
|
||||
|
||||
Reference in New Issue
Block a user