feat(logger): add background logger worker

This commit is contained in:
user
2026-07-20 23:25:35 +04:00
parent b1a155a469
commit 3ac84cade2
+89
View File
@@ -0,0 +1,89 @@
#pragma once
#include <atomic>
#include <thread>
#include "logger.hpp"
#include "message_queue.hpp"
namespace app {
/**
* @brief Фоновый поток записи сообщений в журнал.
*
* LoggerWorker получает сообщения из MessageQueue и передаёт их
* в библиотеку Logger для записи в файл.
*
* Объект Logger используется только внутри рабочего потока,
* поэтому потокобезопасность Logger не требуется.
*/
class LoggerWorker {
public:
/**
* @brief Создаёт worker для записи сообщений.
*
* @param logger Логгер, используемый для записи.
* @param queue Очередь сообщений.
*/
LoggerWorker(logger::Logger &logger, MessageQueue &queue);
/**
* @brief Останавливает поток записи.
*
* Дожидается завершения рабочего потока.
*/
~LoggerWorker();
/**
* @brief Запрещает копирование worker.
*/
LoggerWorker(const LoggerWorker &) = delete;
/**
* @brief Запрещает копирующее присваивание.
*/
LoggerWorker &operator=(const LoggerWorker &) = delete;
/**
* @brief Запускает поток записи сообщений.
*/
void start();
/**
* @brief Отправляет сигнал завершения потоку записи.
*
* После обработки всех сообщений worker завершит работу.
*/
void stop();
private:
/**
* @brief Основной цикл рабочего потока.
*/
void process();
private:
/**
* @brief Логгер для записи сообщений.
*
* Используется только рабочим потоком.
*/
logger::Logger &logger_;
/**
* @brief Очередь входящих сообщений.
*/
MessageQueue &queue_;
/**
* @brief Поток записи.
*/
std::thread workerThread_;
/**
* @brief Флаг работы потока.
*/
std::atomic<bool> running_{false};
};
} // namespace app