From c9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:08:27 +0200 Subject: add: graphs et rushs --- graphs/cpp/logger/CMakeLists.txt | 8 +++++ graphs/cpp/logger/logger.cc | 73 ++++++++++++++++++++++++++++++++++++++++ graphs/cpp/logger/logger.hh | 47 ++++++++++++++++++++++++++ graphs/cpp/logger/main.cc | 13 +++++++ 4 files changed, 141 insertions(+) create mode 100644 graphs/cpp/logger/CMakeLists.txt create mode 100644 graphs/cpp/logger/logger.cc create mode 100644 graphs/cpp/logger/logger.hh create mode 100644 graphs/cpp/logger/main.cc (limited to 'graphs/cpp/logger') diff --git a/graphs/cpp/logger/CMakeLists.txt b/graphs/cpp/logger/CMakeLists.txt new file mode 100644 index 0000000..3a705e9 --- /dev/null +++ b/graphs/cpp/logger/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.21.2) +project(logger) + +add_compile_options(-Wall -Wextra -Werror -pedantic -std=c++20 -Wold-style-cast) + +add_library(logger_a SHARED logger.cc) +add_executable(logger main.cc) +target_link_libraries(logger PUBLIC logger_a) \ No newline at end of file diff --git a/graphs/cpp/logger/logger.cc b/graphs/cpp/logger/logger.cc new file mode 100644 index 0000000..fa2fed1 --- /dev/null +++ b/graphs/cpp/logger/logger.cc @@ -0,0 +1,73 @@ +#include "logger.hh" + +#include +#include + +void LogMe::Logger::set_debug_level(logging_level level) +{ + level_ = level; +} +void LogMe::Logger::log(logging_level level, const std::string& msg) +{ + if (level_ >= level) + { + switch (level) + { + case DEBUG: + debug(msg); + break; + case INFO: + info(msg); + break; + case WARN: + warn(msg); + break; + case CRITICAL: + critical(msg); + break; + case ERROR: + error(msg); + break; + } + } +} + +void LogMe::Logger::debug(const std::string& msg) +{ + if (!output_stream_.is_open()) + std::cerr << "[DEBUG] - " << msg << "\n"; + else + output_stream_ << "[DEBUG] - " << msg << "\n"; +} + +void LogMe::Logger::info(const std::string& msg) +{ + if (!output_stream_.is_open()) + std::cerr << "[INFO] - " << msg << "\n"; + else + output_stream_ << "[INFO] - " << msg << "\n"; +} + +void LogMe::Logger::warn(const std::string& msg) +{ + if (!output_stream_.is_open()) + std::cerr << "[WARN] - " << msg << "\n"; + else + output_stream_ << "[WARN] - " << msg << "\n"; +} + +void LogMe::Logger::error(const std::string& msg) +{ + if (!output_stream_.is_open()) + std::cerr << "[ERROR] - " << msg << "\n"; + else + output_stream_ << "[ERROR] - " << msg << "\n"; +} + +void LogMe::Logger::critical(const std::string& msg) +{ + if (!output_stream_.is_open()) + std::cerr << "[CRITICAL] - " << msg << "\n"; + else + output_stream_ << "[CRITICAL] - " << msg << "\n"; +} \ No newline at end of file diff --git a/graphs/cpp/logger/logger.hh b/graphs/cpp/logger/logger.hh new file mode 100644 index 0000000..4b3a43b --- /dev/null +++ b/graphs/cpp/logger/logger.hh @@ -0,0 +1,47 @@ +#pragma once +#include +#include + +namespace LogMe +{ + enum logging_level + { + DEBUG, + INFO, + WARN, + ERROR, + CRITICAL + }; + class Logger + { + public: + Logger(logging_level level, const std::string& log_file) + : level_{ level } + { + output_stream_.open(log_file); + } + Logger(logging_level level) + : level_{ level } + {} + + ~Logger() + { + if (output_stream_.is_open()) + { + output_stream_.close(); + } + } + + void set_debug_level(logging_level level); + void log(logging_level level, const std::string& msg); + void debug(const std::string& msg); + void info(const std::string& msg); + void warn(const std::string& msg); + void critical(const std::string& msg); + void error(const std::string& msg); + + private: + logging_level level_; + std::ofstream output_stream_; + }; +} // namespace LogMe diff --git a/graphs/cpp/logger/main.cc b/graphs/cpp/logger/main.cc new file mode 100644 index 0000000..483ffdd --- /dev/null +++ b/graphs/cpp/logger/main.cc @@ -0,0 +1,13 @@ +#include + +#include "logger.hh" + +int main() +{ + LogMe::Logger logger{ LogMe::INFO }; + logger.log(LogMe::INFO, "Program starting."); + std::cout << "Hello, World!" << std::endl; + logger.log(LogMe::ERROR, "Error log."); + logger.log(LogMe::DEBUG, "Program end."); + return 0; +} \ No newline at end of file -- cgit v1.2.3