Skip to content

deps: Resolve bidirectional logger_system dependency risk #336

Description

@kcenon

Summary

Resolve the bidirectional dependency risk between thread_system and logger_system by deprecating direct logger_system integration in favor of common_system ILogger interface.

5W1H Specification

  • Who: thread_system maintainers
  • What: Remove direct logger_system dependency, use common_system ILogger exclusively
  • Where: adapters/logger_system_adapter.h, di/service_registration.h
  • When: v0.4.0.0 release cycle
  • Why:
    • thread_system can optionally use logger_system (BUILD_WITH_LOGGER_SYSTEM)
    • logger_system can optionally use thread_system (LOGGER_HAS_THREAD_SYSTEM)
    • Both directions enabled creates circular dependency risk
    • common_system already provides ILogger interface for logging abstraction
  • How:
    1. Deprecate BUILD_WITH_LOGGER_SYSTEM flag
    2. Use common_system ILogger for all logging
    3. logger_system can provide ILogger implementation via DI

Priority

HIGH - Risk level: MODERATE per CROSS_MODULE_INTEGRATION.md

Current Dependency State

           ┌──────────────────────┐
           │    thread_system     │
           │                      │
           │  logger_system_      │◄──── Direct dependency (TO REMOVE)
           │  adapter.h           │
           └──────────┬───────────┘
                      │
    BUILD_WITH_       │  
    LOGGER_SYSTEM     │  
                      │
           ┌──────────▼───────────┐
           │    logger_system     │
           │                      │
           │  thread_system_      │◄──── Uses for async file I/O
           │  integration.h       │
           └──────────────────────┘

Current Integration Files

File Guard Purpose Action
adapters/logger_system_adapter.h BUILD_WITH_LOGGER_SYSTEM Wrap logger_system DEPRECATE
adapters/common_logger_adapter.h (none) Wrap common ILogger KEEP
di/service_registration.h Multiple DI registration Update

Proposed Resolution

Migration: logger_system_adapter → common_logger_adapter

// DEPRECATED: Direct logger_system dependency
#if defined(BUILD_WITH_COMMON_SYSTEM) && defined(BUILD_WITH_LOGGER_SYSTEM)
class logger_system_adapter : public ILogger {
    // Direct dependency on logger_system types
};
#endif

// PREFERRED: Common interface (already exists)
class common_logger_adapter : public thread::ILogger {
public:
    explicit common_logger_adapter(
        std::shared_ptr<common::interfaces::ILogger> logger)
        : logger_(std::move(logger)) {}
    
    // Delegates to common_system ILogger
    void log(log_level level, std::string_view message) override {
        logger_->log(to_common_level(level), message);
    }
private:
    std::shared_ptr<common::interfaces::ILogger> logger_;
};

// logger_system can register its implementation
// ServiceContainer::register<common::interfaces::ILogger>(
//     []() { return std::make_shared<logger_system::logger>(); });

CMake Migration

# DEPRECATED - Remove in v0.5.0.0
option(BUILD_WITH_LOGGER_SYSTEM "Direct logger_system integration" OFF)
if(BUILD_WITH_LOGGER_SYSTEM)
    message(DEPRECATION 
        "BUILD_WITH_LOGGER_SYSTEM is deprecated. Use common_system ILogger instead. "
        "logger_system can provide ILogger implementation via ServiceContainer.")
endif()

# PREFERRED - Already supported
if(BUILD_WITH_COMMON_SYSTEM)
    # Uses common::interfaces::ILogger, no direct logger_system dependency
endif()

Tasks

  • Mark BUILD_WITH_LOGGER_SYSTEM as deprecated in CMake
  • Add deprecation notice to logger_system_adapter.h
  • Ensure common_logger_adapter covers all use cases
  • Update DI registration to prefer common interface
  • Add CMake warning when BUILD_WITH_LOGGER_SYSTEM is used
  • Update documentation with migration guide
  • Create integration test for ILogger-based logging
  • Schedule removal of BUILD_WITH_LOGGER_SYSTEM in v0.5.0.0

Deprecation Timeline

Version Action
v0.4.0.0 Add deprecation warnings, document migration
v0.4.x Monitor usage, assist migrations
v0.5.0.0 Remove BUILD_WITH_LOGGER_SYSTEM flag

Migration Guide for Downstream Users

// Before: Direct logger_system dependency
#ifdef BUILD_WITH_LOGGER_SYSTEM
auto logger = std::make_shared<thread::logger_system_adapter>(
    logger_system::get_default_logger());
thread_pool pool(config, logger);
#endif

// After: Common interface (works with any ILogger implementation)
auto common_logger = container.resolve<common::interfaces::ILogger>();
auto adapter = std::make_shared<thread::common_logger_adapter>(common_logger);
thread_pool pool(config, adapter);

Acceptance Criteria

  • CMake deprecation warning when BUILD_WITH_LOGGER_SYSTEM is ON
  • logger_system_adapter.h has [[deprecated]] attribute
  • All thread_system tests pass with only common_system dependency
  • Documentation shows migration path
  • No compile errors when logger_system is not installed

Dependencies

Parent Epic

Related Issues

Metadata

Metadata

Assignees

Labels

architectureArchitectural changes and designdependenciesExternal dependencies managementpriority:highHigh priority issuerefactoringCode refactoring and improvements

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions