#ifndef FEATHERLOG_LOG_MANAGER_HPP #define FEATHERLOG_LOG_MANAGER_HPP #include #include #include #include #include #include #include #include #include #include #include namespace flog { class FLOG_API LogManager : public std::enable_shared_from_this { friend class LoggerCallback; public: LogManager(const LogManager&) = delete; LogManager& operator=(const LogManager&) = delete; LogManager(LogManager&&) = delete; LogManager& operator=(LogManager&&) = delete; static std::shared_ptr create(); ~LogManager(); LogLevel get_min_log_level() const noexcept; void set_min_log_level(LogLevel level) noexcept; void add_outputter(std::unique_ptr outputter); std::shared_ptr get_logger(const std::string& name); size_t clean_unused_loggers(); private: LogManager() noexcept = default; void print_log(const LogMessage& message) const; std::atomic m_minLogLevel{LogLevel::DEBUG}; mutable std::shared_mutex m_logOutputtersMutex; std::vector> m_logOutputters; mutable std::mutex m_loggersMutex; std::unordered_map> m_loggers; }; } #endif