summaryrefslogtreecommitdiff
path: root/graphs/cpp/logger
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:08:27 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:08:27 +0200
commitc9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c (patch)
tree3e4f42f93c7ae89a364e4d51fff6e5cec4e55fa9 /graphs/cpp/logger
add: graphs et rushs
Diffstat (limited to 'graphs/cpp/logger')
-rw-r--r--graphs/cpp/logger/CMakeLists.txt8
-rw-r--r--graphs/cpp/logger/logger.cc73
-rw-r--r--graphs/cpp/logger/logger.hh47
-rw-r--r--graphs/cpp/logger/main.cc13
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