From 4b94f4ef88ecd3099c504dba54cfc5454f3f9ec8 Mon Sep 17 00:00:00 2001 From: Francois Bonneau Date: Mon, 18 May 2026 14:12:11 +0200 Subject: [PATCH 1/4] fix(FileLogger): transfert flushing option --- src/geode/basic/file_logger_client.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/geode/basic/file_logger_client.cpp b/src/geode/basic/file_logger_client.cpp index facf12cf3..6171d6329 100644 --- a/src/geode/basic/file_logger_client.cpp +++ b/src/geode/basic/file_logger_client.cpp @@ -46,6 +46,7 @@ namespace geode void always_flush() { logger_impl_->flush_on( spdlog::level::level_enum::trace ); + always_flush_ = true; } void set_file_path( std::string_view file_path ) @@ -54,6 +55,10 @@ namespace geode spdlog::drop( logger_name ); logger_impl_ = spdlog::basic_logger_mt( logger_name, std::string( file_path ) ); + if( always_flush_ ) + { + always_flush(); + } } void trace( const std::string &message ) @@ -88,6 +93,7 @@ namespace geode private: std::shared_ptr< spdlog::logger > logger_impl_{ nullptr }; + bool always_flush_{ false }; }; FileLoggerClient::FileLoggerClient( std::string_view file_path ) From 836a3487ead145167b2e388748d4ad79f3427965 Mon Sep 17 00:00:00 2001 From: Francois Bonneau Date: Mon, 18 May 2026 14:39:45 +0200 Subject: [PATCH 2/4] typo --- src/geode/basic/file_logger_client.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/geode/basic/file_logger_client.cpp b/src/geode/basic/file_logger_client.cpp index 6171d6329..b9b374ae7 100644 --- a/src/geode/basic/file_logger_client.cpp +++ b/src/geode/basic/file_logger_client.cpp @@ -51,10 +51,10 @@ namespace geode void set_file_path( std::string_view file_path ) { - static constexpr auto logger_name = "geode_logger_file"; - spdlog::drop( logger_name ); + static constexpr auto LOGGER_NAME = "geode_logger_file"; + spdlog::drop( LOGGER_NAME ); logger_impl_ = spdlog::basic_logger_mt( - logger_name, std::string( file_path ) ); + LOGGER_NAME, std::string( file_path ) ); if( always_flush_ ) { always_flush(); From d8aa68fdaa66d5741c1c32450f9435bdacdfc177 Mon Sep 17 00:00:00 2001 From: Francois Bonneau Date: Mon, 18 May 2026 17:43:13 +0200 Subject: [PATCH 3/4] enrich test --- tests/basic/test-logger.cpp | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/tests/basic/test-logger.cpp b/tests/basic/test-logger.cpp index 2a5e5fefe..8ec8a44f5 100644 --- a/tests/basic/test-logger.cpp +++ b/tests/basic/test-logger.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -76,6 +77,43 @@ void test_logger() geode::Logger::critical( "test ", "critial" ); } +std::string test_huge_message() +{ + std::string huge_message; + const geode::index_t MSG_SIZE{ 100000 }; + huge_message.reserve( MSG_SIZE ); + for( const auto count : geode::Range{ MSG_SIZE } ) + { + huge_message.push_back( 'A' + ( count % 26 ) ); + } + geode::Logger::info( "Huge message size = ", huge_message.size() ); + geode::Logger::info( huge_message ); + + geode::Logger::info( + "Huge message begin = ", huge_message.substr( 0, 50 ) ); + geode::Logger::info( "Huge message end = ", + huge_message.substr( huge_message.size() - 50 ) ); + return huge_message; +} + +void test_change_log_file( const std::string &huge_msg ) +{ + geode::Logger::info( "==============================" ); + geode::Logger::info( "TEST CHANGE LOG FILE" ); + geode::Logger::info( "==============================" ); + + static constexpr auto FILENAME1 = "first.log"; + auto file_logger = std::make_unique< geode::FileLoggerClient >( FILENAME1 ); + auto ®istered_file_logger = dynamic_cast< geode::FileLoggerClient & >( + geode::LoggerManager::register_client( std::move( file_logger ) ) ); + geode::Logger::info( + absl::StrCat( "Message written in first.log", "\n", huge_msg ) ); + static constexpr auto FILENAME2 = "second.log"; + registered_file_logger.set_file_path( FILENAME2 ); + geode::Logger::info( + absl::StrCat( "Message written in second.log", "\n", huge_msg ) ); +} + void test() { geode::OpenGeodeBasicLibrary::initialize(); @@ -84,6 +122,9 @@ void test() std::make_unique< geode::FileLoggerClient >( "geode.log" ) ); test_logger(); + const auto &huge_msg = test_huge_message(); + test_change_log_file( huge_msg ); + geode::Logger::set_level( geode::Logger::LEVEL::err ); test_logger(); } From 9d297400d21980cd9c4f977a0fc34e477266f3b4 Mon Sep 17 00:00:00 2001 From: Francois Bonneau Date: Mon, 18 May 2026 18:05:01 +0200 Subject: [PATCH 4/4] tidy --- tests/basic/test-logger.cpp | 172 +++++++++++++++++++----------------- 1 file changed, 89 insertions(+), 83 deletions(-) diff --git a/tests/basic/test-logger.cpp b/tests/basic/test-logger.cpp index 8ec8a44f5..00af0ccb1 100644 --- a/tests/basic/test-logger.cpp +++ b/tests/basic/test-logger.cpp @@ -32,101 +32,107 @@ #include #include - -class CustomClient : public geode::LoggerClient +namespace { -public: - void trace( const std::string &message ) override - { - std::cout << "Old school logger => " << message << std::endl; - } - void debug( const std::string &message ) override + class CustomClient : public geode::LoggerClient { - std::cout << "Old school logger => " << message << std::endl; - } - - void info( const std::string &message ) override + public: + void trace( const std::string &message ) override + { + std::cout << "Old school logger => " << message << '\n'; + } + + void debug( const std::string &message ) override + { + std::cout << "Old school logger => " << message << '\n'; + } + + void info( const std::string &message ) override + { + std::cout << "Old school logger => " << message << '\n'; + } + + void warn( const std::string &message ) override + { + std::cout << "Old school logger => " << message << '\n'; + } + + void error( const std::string &message ) override + { + std::cout << "Old school logger => " << message << '\n'; + } + + void critical( const std::string &message ) override + { + std::cout << "Old school logger => " << message << '\n'; + } + }; + + void test_logger() { - std::cout << "Old school logger => " << message << std::endl; + geode::Logger::trace( "test ", "trace" ); + geode::Logger::debug( "test ", "debug" ); + geode::Logger::info( "test ", "info" ); + geode::Logger::warn( "test ", "warn" ); + geode::Logger::error( "test ", "error" ); + geode::Logger::critical( "test ", "critial" ); } - void warn( const std::string &message ) override + std::string test_huge_message() { - std::cout << "Old school logger => " << message << std::endl; + std::string huge_message; + const geode::index_t MSG_SIZE{ 100000 }; + huge_message.reserve( MSG_SIZE ); + for( const auto count : geode::Range{ MSG_SIZE } ) + { + huge_message.push_back( 'A' + ( count % 26 ) ); + } + geode::Logger::info( "Huge message size = ", huge_message.size() ); + geode::Logger::info( huge_message ); + + geode::Logger::info( + "Huge message begin = ", huge_message.substr( 0, 50 ) ); + geode::Logger::info( "Huge message end = ", + huge_message.substr( huge_message.size() - 50 ) ); + return huge_message; } - void error( const std::string &message ) override + void test_change_log_file( const std::string &huge_msg ) { - std::cout << "Old school logger => " << message << std::endl; + geode::Logger::info( "==============================" ); + geode::Logger::info( "TEST CHANGE LOG FILE" ); + geode::Logger::info( "==============================" ); + + static constexpr auto FILENAME1 = "first.log"; + auto file_logger = + std::make_unique< geode::FileLoggerClient >( FILENAME1 ); + auto ®istered_file_logger = + dynamic_cast< geode::FileLoggerClient & >( + geode::LoggerManager::register_client( + std::move( file_logger ) ) ); + geode::Logger::info( + absl::StrCat( "Message written in first.log", "\n", huge_msg ) ); + static constexpr auto FILENAME2 = "second.log"; + registered_file_logger.set_file_path( FILENAME2 ); + geode::Logger::info( + absl::StrCat( "Message written in second.log", "\n", huge_msg ) ); } - void critical( const std::string &message ) override + void test() { - std::cout << "Old school logger => " << message << std::endl; + geode::OpenGeodeBasicLibrary::initialize(); + geode::LoggerManager::register_client( + std::make_unique< CustomClient >() ); + geode::LoggerManager::register_client( + std::make_unique< geode::FileLoggerClient >( "geode.log" ) ); + + test_logger(); + const auto &huge_msg = test_huge_message(); + test_change_log_file( huge_msg ); + + geode::Logger::set_level( geode::Logger::LEVEL::err ); + test_logger(); } -}; - -void test_logger() -{ - geode::Logger::trace( "test ", "trace" ); - geode::Logger::debug( "test ", "debug" ); - geode::Logger::info( "test ", "info" ); - geode::Logger::warn( "test ", "warn" ); - geode::Logger::error( "test ", "error" ); - geode::Logger::critical( "test ", "critial" ); -} - -std::string test_huge_message() -{ - std::string huge_message; - const geode::index_t MSG_SIZE{ 100000 }; - huge_message.reserve( MSG_SIZE ); - for( const auto count : geode::Range{ MSG_SIZE } ) - { - huge_message.push_back( 'A' + ( count % 26 ) ); - } - geode::Logger::info( "Huge message size = ", huge_message.size() ); - geode::Logger::info( huge_message ); - - geode::Logger::info( - "Huge message begin = ", huge_message.substr( 0, 50 ) ); - geode::Logger::info( "Huge message end = ", - huge_message.substr( huge_message.size() - 50 ) ); - return huge_message; -} - -void test_change_log_file( const std::string &huge_msg ) -{ - geode::Logger::info( "==============================" ); - geode::Logger::info( "TEST CHANGE LOG FILE" ); - geode::Logger::info( "==============================" ); - - static constexpr auto FILENAME1 = "first.log"; - auto file_logger = std::make_unique< geode::FileLoggerClient >( FILENAME1 ); - auto ®istered_file_logger = dynamic_cast< geode::FileLoggerClient & >( - geode::LoggerManager::register_client( std::move( file_logger ) ) ); - geode::Logger::info( - absl::StrCat( "Message written in first.log", "\n", huge_msg ) ); - static constexpr auto FILENAME2 = "second.log"; - registered_file_logger.set_file_path( FILENAME2 ); - geode::Logger::info( - absl::StrCat( "Message written in second.log", "\n", huge_msg ) ); -} - -void test() -{ - geode::OpenGeodeBasicLibrary::initialize(); - geode::LoggerManager::register_client( std::make_unique< CustomClient >() ); - geode::LoggerManager::register_client( - std::make_unique< geode::FileLoggerClient >( "geode.log" ) ); - - test_logger(); - const auto &huge_msg = test_huge_message(); - test_change_log_file( huge_msg ); - - geode::Logger::set_level( geode::Logger::LEVEL::err ); - test_logger(); -} - +} // namespace OPENGEODE_TEST( "logger" ) \ No newline at end of file