70 lines
3.1 KiB
C++
70 lines
3.1 KiB
C++
#pragma once
|
||
#include <spdlog/spdlog.h>
|
||
#include <spdlog/async.h>
|
||
#include <spdlog/sinks/rotating_file_sink.h>
|
||
#include <spdlog/sinks/stdout_color_sinks.h>
|
||
#include <spdlog/details/thread_pool.h> // 新增:引入thread_pool所在头文件
|
||
#include <memory>
|
||
#include <string>
|
||
#include <vector> // 新增:用于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<spdlog::logger> GetDefaultLogger();
|
||
|
||
// 获取指定模块的 logger(局部 logger,支持单独设置级别)
|
||
// 模块名示例:"net"(网络模块)、"db"(数据库模块)、"ui"(界面模块)
|
||
static std::shared_ptr<spdlog::logger> 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<spdlog::details::thread_pool> thread_pool_;
|
||
// 全局默认 logger
|
||
std::shared_ptr<spdlog::logger> 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__)
|