#pragma once #include <memory> #include <string> #include <vector> #include <spdlog/logger.h> #include <spdlog/sinks/sink.h> #include "libvideo2x_export.h" namespace video2x { namespace logger_manager { class LIBVIDEO2X_API LoggerManager { public: LoggerManager(const LoggerManager&) = delete; LoggerManager& operator=(const LoggerManager&) = delete; static LoggerManager& instance(); std::shared_ptr<spdlog::logger> logger(); bool reconfigure_logger( const std::string& logger_name, const std::vector<spdlog::sink_ptr>& sinks, const std::string& pattern = "%+" ); bool set_log_level(const std::string& level_str); void hook_ffmpeg_logging(); void unhook_ffmpeg_logging(); private: LoggerManager(); std::shared_ptr<spdlog::logger> logger_ = nullptr; }; } // namespace logger_manager // Convenience function to get the logger instance inline std::shared_ptr<spdlog::logger> logger() { return logger_manager::LoggerManager::instance().logger(); } } // namespace video2x