#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