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