feat: Integrate StillHammer Logger throughout GroveEngine

Replace manual spdlog logger creation (10+ lines) with StillHammer Logger (1 line).

Changes:
- IntraIOManager: Use createDomainLogger("IntraIOManager", "io")
- ModuleLoader: Use createDomainLogger("ModuleLoader", "engine")
- EngineFactory: Use createDomainLogger("EngineFactory", "engine")
- IOFactory: Use createDomainLogger("IOFactory", "io")
- SequentialModuleSystem: Use createDomainLogger("SequentialModuleSystem", "engine")
- ModuleFactory: Use createDomainLogger("ModuleFactory", "engine")
- DebugEngine: Use createDomainLogger("DebugEngine", "engine")
- ModuleSystemFactory: Use createDomainLogger("ModuleSystemFactory", "engine")
- CMakeLists.txt: Link stillhammer_logger to grove_impl

Benefits:
- Domain-organized logs: logs/io/, logs/engine/
- Auto snake_case conversion: IntraIOManager → intra_iomanager.log
- Cleaner code: 1 line instead of 10+
- Consistent logging across codebase
- Build and tests pass successfully

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
StillHammer 2025-11-20 03:11:36 +08:00
parent 3923e3cbbe
commit 7e76ed47a4
9 changed files with 18 additions and 106 deletions

View File

@ -74,6 +74,7 @@ if(GROVE_BUILD_IMPLEMENTATIONS)
target_link_libraries(grove_impl PUBLIC target_link_libraries(grove_impl PUBLIC
GroveEngine::core GroveEngine::core
topictree::topictree topictree::topictree
stillhammer_logger
OpenSSL::Crypto OpenSSL::Crypto
spdlog::spdlog spdlog::spdlog
${CMAKE_DL_LIBS} ${CMAKE_DL_LIBS}

View File

@ -7,31 +7,16 @@
#include <fstream> #include <fstream>
#include <filesystem> #include <filesystem>
#include <sstream> #include <sstream>
#include <spdlog/sinks/stdout_color_sinks.h> #include <logger/Logger.h>
#include <spdlog/sinks/basic_file_sink.h>
namespace grove { namespace grove {
using json = nlohmann::json; using json = nlohmann::json;
DebugEngine::DebugEngine() { DebugEngine::DebugEngine() {
// Create comprehensive logger with multiple sinks logger = stillhammer::createDomainLogger("DebugEngine", "engine");
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/debug_engine.log", true);
console_sink->set_level(spdlog::level::trace); // FULL VERBOSE MODE
file_sink->set_level(spdlog::level::trace);
logger = std::make_shared<spdlog::logger>("DebugEngine",
spdlog::sinks_init_list{console_sink, file_sink});
logger->set_level(spdlog::level::trace);
logger->flush_on(spdlog::level::debug);
// Register logger globally
spdlog::register_logger(logger);
logger->info("🔧 DebugEngine constructor - Maximum logging enabled"); logger->info("🔧 DebugEngine constructor - Maximum logging enabled");
logger->debug("📊 Console sink level: DEBUG, File sink level: TRACE");
logger->trace("🏗️ DebugEngine object created at address: {}", static_cast<void*>(this)); logger->trace("🏗️ DebugEngine object created at address: {}", static_cast<void*>(this));
} }

View File

@ -2,7 +2,7 @@
#include <fstream> #include <fstream>
#include <algorithm> #include <algorithm>
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
#include <spdlog/sinks/stdout_color_sinks.h> #include <logger/Logger.h>
using json = nlohmann::json; using json = nlohmann::json;
@ -183,15 +183,7 @@ std::shared_ptr<spdlog::logger> EngineFactory::getFactoryLogger() {
static std::shared_ptr<spdlog::logger> logger = nullptr; static std::shared_ptr<spdlog::logger> logger = nullptr;
if (!logger) { if (!logger) {
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); logger = stillhammer::createDomainLogger("EngineFactory", "engine");
console_sink->set_level(spdlog::level::debug);
logger = std::make_shared<spdlog::logger>("EngineFactory", console_sink);
logger->set_level(spdlog::level::debug);
logger->flush_on(spdlog::level::debug);
// Register globally
spdlog::register_logger(logger);
} }
return logger; return logger;

View File

@ -2,7 +2,7 @@
#include <algorithm> #include <algorithm>
#include <random> #include <random>
#include <functional> #include <functional>
#include <spdlog/sinks/stdout_color_sinks.h> #include <logger/Logger.h>
// Include implemented transports // Include implemented transports
#include <grove/IntraIO.h> #include <grove/IntraIO.h>
@ -266,14 +266,7 @@ std::shared_ptr<spdlog::logger> IOFactory::getFactoryLogger() {
static std::shared_ptr<spdlog::logger> logger = nullptr; static std::shared_ptr<spdlog::logger> logger = nullptr;
if (!logger) { if (!logger) {
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); logger = stillhammer::createDomainLogger("IOFactory", "io");
console_sink->set_level(spdlog::level::debug);
logger = std::make_shared<spdlog::logger>("IOFactory", console_sink);
logger->set_level(spdlog::level::debug);
logger->flush_on(spdlog::level::debug);
spdlog::register_logger(logger);
} }
return logger; return logger;

View File

@ -2,26 +2,13 @@
#include <grove/IntraIO.h> #include <grove/IntraIO.h>
#include <grove/JsonDataNode.h> #include <grove/JsonDataNode.h>
#include <stdexcept> #include <stdexcept>
#include <spdlog/sinks/stdout_color_sinks.h> #include <logger/Logger.h>
#include <spdlog/sinks/basic_file_sink.h>
namespace grove { namespace grove {
IntraIOManager::IntraIOManager() { IntraIOManager::IntraIOManager() {
// Create logger // Create logger with domain organization
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); logger = stillhammer::createDomainLogger("IntraIOManager", "io");
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/intra_io_manager.log", true);
console_sink->set_level(spdlog::level::debug);
file_sink->set_level(spdlog::level::trace);
logger = std::make_shared<spdlog::logger>("IntraIOManager",
spdlog::sinks_init_list{console_sink, file_sink});
logger->set_level(spdlog::level::trace);
logger->flush_on(spdlog::level::debug);
spdlog::register_logger(logger);
logger->info("🌐🔗 IntraIOManager created - Central message router initialized"); logger->info("🌐🔗 IntraIOManager created - Central message router initialized");
// Start batch flush thread // Start batch flush thread

View File

@ -2,27 +2,14 @@
#include <filesystem> #include <filesystem>
#include <dlfcn.h> #include <dlfcn.h>
#include <algorithm> #include <algorithm>
#include <spdlog/sinks/stdout_color_sinks.h> #include <logger/Logger.h>
#include <spdlog/sinks/basic_file_sink.h>
namespace fs = std::filesystem; namespace fs = std::filesystem;
namespace grove { namespace grove {
ModuleFactory::ModuleFactory() { ModuleFactory::ModuleFactory() {
// Create logger with file and console output logger = stillhammer::createDomainLogger("ModuleFactory", "engine");
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/module_factory.log", true);
console_sink->set_level(spdlog::level::info);
file_sink->set_level(spdlog::level::trace);
logger = std::make_shared<spdlog::logger>("ModuleFactory",
spdlog::sinks_init_list{console_sink, file_sink});
logger->set_level(spdlog::level::trace);
logger->flush_on(spdlog::level::debug);
spdlog::register_logger(logger);
logger->info("=" "=" "=" "=" "=" "=" "=" "=" "=" "=" "=" "=" "=" "="); logger->info("=" "=" "=" "=" "=" "=" "=" "=" "=" "=" "=" "=" "=" "=");
logger->info("🏭 MODULE FACTORY INITIALIZED"); logger->info("🏭 MODULE FACTORY INITIALIZED");

View File

@ -6,20 +6,12 @@
#include <unistd.h> #include <unistd.h>
#include <filesystem> #include <filesystem>
#include <thread> #include <thread>
#include <spdlog/sinks/stdout_color_sinks.h> #include <logger/Logger.h>
namespace grove { namespace grove {
ModuleLoader::ModuleLoader() { ModuleLoader::ModuleLoader() {
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); logger = stillhammer::createDomainLogger("ModuleLoader", "engine");
console_sink->set_level(spdlog::level::debug);
logger = std::make_shared<spdlog::logger>("ModuleLoader", console_sink);
logger->set_level(spdlog::level::debug);
logger->flush_on(spdlog::level::debug);
spdlog::register_logger(logger);
logger->info("🔧 ModuleLoader initialized"); logger->info("🔧 ModuleLoader initialized");
} }

View File

@ -1,7 +1,7 @@
#include <grove/ModuleSystemFactory.h> #include <grove/ModuleSystemFactory.h>
#include <algorithm> #include <algorithm>
#include <thread> #include <thread>
#include <spdlog/sinks/stdout_color_sinks.h> #include <logger/Logger.h>
// Include implemented systems // Include implemented systems
#include <grove/SequentialModuleSystem.h> #include <grove/SequentialModuleSystem.h>
@ -210,14 +210,7 @@ std::shared_ptr<spdlog::logger> ModuleSystemFactory::getFactoryLogger() {
static std::shared_ptr<spdlog::logger> logger = nullptr; static std::shared_ptr<spdlog::logger> logger = nullptr;
if (!logger) { if (!logger) {
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); logger = stillhammer::createDomainLogger("ModuleSystemFactory", "engine");
console_sink->set_level(spdlog::level::debug);
logger = std::make_shared<spdlog::logger>("ModuleSystemFactory", console_sink);
logger->set_level(spdlog::level::debug);
logger->flush_on(spdlog::level::debug);
spdlog::register_logger(logger);
} }
return logger; return logger;

View File

@ -1,30 +1,12 @@
#include <grove/SequentialModuleSystem.h> #include <grove/SequentialModuleSystem.h>
#include <grove/JsonDataNode.h> #include <grove/JsonDataNode.h>
#include <stdexcept> #include <stdexcept>
#include <spdlog/sinks/stdout_color_sinks.h> #include <logger/Logger.h>
#include <spdlog/sinks/basic_file_sink.h>
namespace grove { namespace grove {
SequentialModuleSystem::SequentialModuleSystem() { SequentialModuleSystem::SequentialModuleSystem() {
// Try to get existing logger first (avoid duplicate registration) logger = stillhammer::createDomainLogger("SequentialModuleSystem", "engine");
logger = spdlog::get("SequentialModuleSystem");
if (!logger) {
// Create logger with file and console output
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/sequential_system.log", true);
console_sink->set_level(spdlog::level::trace); // FULL VERBOSE MODE
file_sink->set_level(spdlog::level::trace);
logger = std::make_shared<spdlog::logger>("SequentialModuleSystem",
spdlog::sinks_init_list{console_sink, file_sink});
logger->set_level(spdlog::level::trace);
logger->flush_on(spdlog::level::debug);
spdlog::register_logger(logger);
}
logSystemStart(); logSystemStart();
lastProcessTime = std::chrono::high_resolution_clock::now(); lastProcessTime = std::chrono::high_resolution_clock::now();