#pragma once #include #include #include #include namespace flog { class LogManager; class FLOG_API Logger final { friend class LogManager; public: Logger(const Logger&) = delete; Logger operator=(const Logger&) = delete; Logger(const Logger&&) = delete; Logger operator=(const Logger&&) = delete; ~Logger() = default; template void FLOG_CALL info(std::format_string fmt, Args &&... args, std::source_location loc = std::source_location::current()); private: Logger(std::string name, const std::weak_ptr &manager) noexcept : m_name(std::move(name)), m_logManager(manager) { } const std::string m_name; const std::weak_ptr m_logManager; }; }