feat(app): add threaded logger worker
This commit is contained in:
+5
-1
@@ -1,4 +1,5 @@
|
||||
CXXFLAGS := \
|
||||
-I$(ROOT_DIR)/app/include \
|
||||
-I$(ROOT_DIR)/core/include \
|
||||
-I$(ROOT_DIR)/logger/include
|
||||
|
||||
@@ -9,7 +10,10 @@ LDLIBS += -llogger
|
||||
|
||||
TARGET := $(BUILD_DIR)/logger_app
|
||||
|
||||
SRC := src/main.cpp
|
||||
SRC := \
|
||||
src/main.cpp \
|
||||
src/message_queue.cpp \
|
||||
src/logger_worker.cpp
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "logger_worker.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace app {
|
||||
|
||||
LoggerWorker::LoggerWorker(logger::Logger &logger, MessageQueue &queue)
|
||||
@@ -21,7 +23,11 @@ void LoggerWorker::stop() {
|
||||
|
||||
void LoggerWorker::process() {
|
||||
while (auto message = queue_.pop()) {
|
||||
logger_.writeMessage(message->level, message->message);
|
||||
auto status = logger_.writeMessage(message->level, message->message);
|
||||
|
||||
if (!status.isSuccess()) {
|
||||
std::cerr << "Logger error: " << status.getError() << '\n';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+16
-4
@@ -1,17 +1,29 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#include "logger.hpp"
|
||||
#include "logger_worker.hpp"
|
||||
#include "message_queue.hpp"
|
||||
|
||||
int main() {
|
||||
logger::Logger logger("app.log", logger::LogLevel::info());
|
||||
|
||||
auto status = logger.writeMessage("Hello from shared library");
|
||||
app::MessageQueue queue;
|
||||
app::LoggerWorker worker(logger, queue);
|
||||
|
||||
if (!status.isSuccess()) {
|
||||
std::cerr << status.getError() << '\n';
|
||||
worker.start();
|
||||
|
||||
return 1;
|
||||
std::string message;
|
||||
|
||||
while (std::getline(std::cin, message)) {
|
||||
if (message == "exit") {
|
||||
break;
|
||||
}
|
||||
|
||||
queue.push({logger::LogLevel::info(), message});
|
||||
}
|
||||
|
||||
worker.stop();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user