#pragma once #include #include #include #include #include // 新增:引入thread_pool所在头文件 #include #include #include // 新增:用于sink向量转换,避免编译报错 // 单例模式封装 logger,全局唯一,支持多模块、局部级别、异步输出 class Logger { public: // 禁止拷贝构造和赋值运算符(单例) Logger(const Logger&) = delete; Logger& operator=(const Logger&) = delete; // 初始化 logger(必须在程序启动时调用,建议main函数开头) // 参数:日志文件路径、日志文件最大大小(MB)、备份文件数量、是否开启异步 static void Init(const std::string& log_path = "logs/app.log", size_t max_file_size_mb = 5, size_t max_backup_count = 3, bool is_async = true); // 获取全局默认 logger(通用日志) static std::shared_ptr GetDefaultLogger(); // 获取指定模块的 logger(局部 logger,支持单独设置级别) // 模块名示例:"net"(网络模块)、"db"(数据库模块)、"ui"(界面模块) static std::shared_ptr GetModuleLogger(const std::string& module_name); // 设置全局默认日志级别(对所有未单独设置级别的 logger 生效) static void SetGlobalLevel(spdlog::level::level_enum level); // 设置指定模块 logger 的局部级别(优先级高于全局级别) static void SetModuleLevel(const std::string& module_name, spdlog::level::level_enum level); // 关闭所有 logger,释放资源(建议程序退出时调用) static void Shutdown(); private: // 私有构造函数(单例) Logger(); // 析构函数 ~Logger() = default; // 单例实例 static Logger& GetInstance(); // 全局线程池(异步日志使用)- 修复:thread_pool在spdlog::details命名空间下 std::shared_ptr thread_pool_; // 全局默认 logger std::shared_ptr default_logger_; // 新增:存储全局日志格式,供模块logger复用(避免formatter()方法兼容问题) std::string log_pattern_; }; // 便捷宏定义(简化调用,可根据需求开启/关闭) #define LOG_INFO(...) Logger::GetDefaultLogger()->info(__VA_ARGS__) #define LOG_WARN(...) Logger::GetDefaultLogger()->warn(__VA_ARGS__) #define LOG_ERROR(...) Logger::GetDefaultLogger()->error(__VA_ARGS__) #define LOG_DEBUG(...) Logger::GetDefaultLogger()->debug(__VA_ARGS__) #define LOG_CRITICAL(...) Logger::GetDefaultLogger()->critical(__VA_ARGS__) #define LOG_TRACE(...) Logger::GetDefaultLogger()->trace(__VA_ARGS__) // 模块日志宏定义(示例,可自行扩展) #define LOG_NET_INFO(...) Logger::GetModuleLogger("net")->info(__VA_ARGS__) #define LOG_DB_WARN(...) Logger::GetModuleLogger("db")->warn(__VA_ARGS__) #define LOG_UI_ERROR(...) Logger::GetModuleLogger("ui")->error(__VA_ARGS__)