Skip to content

feat(logging): implement GlobalLoggerRegistry for runtime binding #174

Description

@kcenon

Summary

Implement GlobalLoggerRegistry, the core component of the runtime binding pattern.

Background

The current mutual dependency between thread_system and logger_system causes issues:

  • logger_systemthread_system (for async processing)
  • thread_system → defines its own logger_interface.h (to avoid circular dependency)

This structure creates maintenance and extensibility problems.

Tasks

1. Implement GlobalLoggerRegistry Class

  • Create include/kcenon/common/logging/global_registry.h
  • Apply singleton pattern (thread-safe)
  • Implement concurrency control with std::shared_mutex
  • Manage default logger and named loggers

2. Interface Definition

class GlobalLoggerRegistry final : public interfaces::ILoggerRegistry {
public:
    static GlobalLoggerRegistry& instance();

    void set_default(std::shared_ptr<ILogger> logger) override;
    std::shared_ptr<ILogger> get_default() const override;

    void register_logger(std::string_view name, std::shared_ptr<ILogger> logger) override;
    std::shared_ptr<ILogger> get_logger(std::string_view name) const override;
    void unregister_logger(std::string_view name) override;

    void register_factory(std::string_view name, LoggerFactory factory) override;
};

3. Provide Convenience Functions

  • get_registry() - Return Registry instance
  • get_logger() - Return default logger
  • get_logger(name) - Return named logger

4. NullLogger Default Implementation

  • Implement NullLogger to return when no logger is registered
  • All methods operate as no-op

Test Requirements

  • Single-threaded registration/retrieval tests
  • Multi-threaded concurrent access tests
  • Factory lazy creation tests
  • NullLogger fallback tests

Impact Scope

  • All subsystems will use this Registry
  • Replaces existing thread_system::logger_registry

Related Milestone

  • Phase 1: common_system interface extension
  • Priority: Critical
  • Blocks: All of Phase 2 and Phase 3

Metadata

Metadata

Assignees

Labels

asyncAsynchronous operationsci-cdCI/CD and build automationdependenciesExternal dependencies managementenhancementNew feature or requestloggingLogging related changesthreadingThreading and concurrency

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions