logging Last update: 16.07.2025 1 3 4 #pragma once 5 6 #include "core/logging/console_logger.h" 7 #include "core/logging/i_logger.h" 8 #include <memory> 9 #include <vector> 10 15 namespace simulation_framework 16 { 17 namespace core 18 { 19 namespace logging 20 { 21 27 class LoggingInstance 28 { 29 public: 30 using ILoggerContainer = std::vector<std::unique_ptr<ILogger>>; 31 32 virtual ~LoggingInstance() = default; 33 34 LoggingInstance(const LoggingInstance&) = delete; 35 LoggingInstance& operator=(const LoggingInstance&) = delete; 36 38 static LoggingInstance& GetInstance() 39 { 40 static LoggingInstance log_instance = LoggingInstance(); 41 return log_instance; 42 } 43 46 void RegisterLogger(std::unique_ptr<ILogger> logger) { loggers_.push_back(std::move(logger)); } 47 49 void ClearLoggers() { loggers_.clear(); } 50 52 const ILoggerContainer& GetLoggers() const { return loggers_; } 53 57 void Log(LogLevel level, std::string_view message) 58 { 59 for (const auto& logger : loggers_) 60 { 61 if (logger) 62 { 63 logger->Log(level, message); 64 } 65 } 66 } 67 68 private: 69 LoggingInstance() { RegisterLogger(std::make_unique<simulation_framework::core::logging::ConsoleLogger>()); }; 70 71 ILoggerContainer loggers_; 72 }; 73 77 static inline void Trace(std::string_view message) noexcept 78 { 79 LoggingInstance::GetInstance().Log(LogLevel::kTrace, message); 80 } 81 85 static inline void Debug(std::string_view message) noexcept 86 { 87 LoggingInstance::GetInstance().Log(LogLevel::kDebug, message); 88 } 89 93 static inline void Info(std::string_view message) noexcept 94 { 95 LoggingInstance::GetInstance().Log(LogLevel::kInfo, message); 96 } 97 101 static inline void Warning(std::string_view message) noexcept 102 { 103 LoggingInstance::GetInstance().Log(LogLevel::kWarning, message); 104 } 105 109 static inline void Error(std::string_view message) noexcept 110 { 111 LoggingInstance::GetInstance().Log(LogLevel::kError, message); 112 } 113 114 } // namespace logging 115 } // namespace core 116 } // namespace simulation_framework