diff options
| author | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:08:27 +0200 |
|---|---|---|
| committer | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:08:27 +0200 |
| commit | c9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c (patch) | |
| tree | 3e4f42f93c7ae89a364e4d51fff6e5cec4e55fa9 /graphs/cpp/logger | |
add: graphs et rushs
Diffstat (limited to 'graphs/cpp/logger')
| -rw-r--r-- | graphs/cpp/logger/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | graphs/cpp/logger/logger.cc | 73 | ||||
| -rw-r--r-- | graphs/cpp/logger/logger.hh | 47 | ||||
| -rw-r--r-- | graphs/cpp/logger/main.cc | 13 |
4 files changed, 141 insertions, 0 deletions
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 <iostream> +#include <string> + +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 <fstream> +#include <string> + +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 <iostream> + +#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 |
