From ab26e46a9de82727ccc450e10c98212991fe4450 Mon Sep 17 00:00:00 2001 From: Taanviir <66136914+Taanviir@users.noreply.github.com> Date: Sun, 21 Apr 2024 19:44:32 +0400 Subject: [PATCH] feat(Logger): implemented basic logger --- sources/server/Logger.hpp | 61 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 sources/server/Logger.hpp diff --git a/sources/server/Logger.hpp b/sources/server/Logger.hpp new file mode 100644 index 0000000..1a1d085 --- /dev/null +++ b/sources/server/Logger.hpp @@ -0,0 +1,61 @@ +#ifndef LOGGER_HPP +#define LOGGER_HPP + +#include "webserv.hpp" + +enum LogLevel { + INFO = 0, + DEBUG, + ERROR +}; + +#define LOG_FILE "logfile.txt" + +class Logger { +public: + static void log_message(const string& message, LogLevel level, bool toFile = false) + { + string logMessage = + "[" + _get_current_time() + "]" + _level_to_string(level) + ": " + message; + if (toFile) { + ofstream _logFile; + _logFile.open(LOG_FILE, std::ios_base::app); + if (!_logFile.is_open()) + THROW_EXCEPTION_WITH_INFO("Log: could not open log file"); + + _logFile << logMessage << endl; + _logFile.close(); + } + else + cout << logMessage << endl; + } + +private: + static LogLevel _level; + + static string _get_current_time() + { + time_t rawtime; + struct tm* timeInfo; + char buffer[80]; + + time(&rawtime); + timeInfo = localtime(&rawtime); + + strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeInfo); + return string(buffer); + } + static string _level_to_string(LogLevel level) + { + switch (level) { + case INFO: return "INFO"; + case DEBUG: return "DEBUG"; + case ERROR: return "ERROR"; + } + } + + Logger(); + ~Logger(); +}; + +#endif // LOGGER_HPP