From 9c8b2025950683fa1adbb1c8c3d9af869e210721 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Thu, 5 Feb 2026 21:03:27 -0800 Subject: [PATCH] Add ZLIB linking and file logging support - Add ZLIB find_package and linking for addon compression - Add file logging to logs/wowee.log --- CMakeLists.txt | 2 ++ include/core/logger.hpp | 4 ++++ src/core/logger.cpp | 37 +++++++++++++++++++++++++++---------- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2472b75e..c2d2cb7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,7 @@ find_package(GLEW REQUIRED) find_package(OpenSSL REQUIRED) find_package(Threads REQUIRED) find_package(SQLite3 REQUIRED) +find_package(ZLIB REQUIRED) find_package(PkgConfig REQUIRED) pkg_check_modules(FFMPEG REQUIRED libavformat libavcodec libswscale libavutil) @@ -260,6 +261,7 @@ target_link_libraries(wowee PRIVATE OpenSSL::SSL OpenSSL::Crypto Threads::Threads + ZLIB::ZLIB ) # SQLite diff --git a/include/core/logger.hpp b/include/core/logger.hpp index f98a114a..7776f53f 100644 --- a/include/core/logger.hpp +++ b/include/core/logger.hpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace wowee { namespace core { @@ -63,6 +64,9 @@ private: LogLevel minLevel = LogLevel::DEBUG; std::mutex mutex; + std::ofstream fileStream; + bool fileReady = false; + void ensureFile(); }; // Convenience macros diff --git a/src/core/logger.cpp b/src/core/logger.cpp index df477b34..79953f6a 100644 --- a/src/core/logger.cpp +++ b/src/core/logger.cpp @@ -2,6 +2,7 @@ #include #include #include +#include namespace wowee { namespace core { @@ -11,12 +12,21 @@ Logger& Logger::getInstance() { return instance; } +void Logger::ensureFile() { + if (fileReady) return; + fileReady = true; + std::error_code ec; + std::filesystem::create_directories("logs", ec); + fileStream.open("logs/wowee.log", std::ios::out | std::ios::app); +} + void Logger::log(LogLevel level, const std::string& message) { if (level < minLevel) { return; } std::lock_guard lock(mutex); + ensureFile(); // Get current time auto now = std::chrono::system_clock::now(); @@ -28,20 +38,27 @@ void Logger::log(LogLevel level, const std::string& message) { localtime_r(&time, &tm); // Format: [YYYY-MM-DD HH:MM:SS.mmm] [LEVEL] message - std::cout << "[" - << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") - << "." << std::setfill('0') << std::setw(3) << ms.count() - << "] ["; + std::ostringstream line; + line << "[" + << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") + << "." << std::setfill('0') << std::setw(3) << ms.count() + << "] ["; switch (level) { - case LogLevel::DEBUG: std::cout << "DEBUG"; break; - case LogLevel::INFO: std::cout << "INFO "; break; - case LogLevel::WARNING: std::cout << "WARN "; break; - case LogLevel::ERROR: std::cout << "ERROR"; break; - case LogLevel::FATAL: std::cout << "FATAL"; break; + case LogLevel::DEBUG: line << "DEBUG"; break; + case LogLevel::INFO: line << "INFO "; break; + case LogLevel::WARNING: line << "WARN "; break; + case LogLevel::ERROR: line << "ERROR"; break; + case LogLevel::FATAL: line << "FATAL"; break; } - std::cout << "] " << message << std::endl; + line << "] " << message; + + std::cout << line.str() << std::endl; + if (fileStream.is_open()) { + fileStream << line.str() << std::endl; + fileStream.flush(); + } } void Logger::setLogLevel(LogLevel level) {