日志库的封装适用于项目调试问题,可以通过打印日志信息具体定位到某一位置。
日志级别管理
日志库支持多种日志级别(TRACE、DEBUG、INFO、WARN、ERROR、FATAL等)。
开发阶段,可以将日志设置为DEBUG,输出详细的信息;生产环境中,将日志级别设置为ERROR或WARNING,只记录关键的错误和警告信息。
日志格式化
日志库可以提供灵活的日志格式化功能,包括时间戳、日志级别、线程信息、文件名、行号等。如:
2025-08-12 10:00:00\] \[INFO\] \[main.cpp:124\] This is an info message.这种格式化有助于快速具体定位问题和理解日志内容。
cout输出输出格式单一,没有内置的格式化功能,需要手动添加时间戳等信息。
## spdlog封装
采用google的spdlog日志库进行日志管理,对spdlog采用单例模式进行封装。
```MyLog.h
namespace ys {
class Logger
{
public:
static void InitLogger(std::string logger_name,std::string log_file,spdlog::level::level_enum log_level);
static std::shared_ptr GetLogger();
private:
Logger();
Logger(const Logger&) = delete;
Logger& operator=(const Logger&)=delete;
private:
std::shared_ptr _logger;
std::mutex _mutex;
};
#define DUBG(format, ...) Logger::GetLogger()->debug(std::string("[{:>10s}:{:<4d}]")+format,__FILE__,__LINE__, ##__VA_ARGS__)
#define INFO(format, ...) Logger::GetLogger()->info(std::string("[{:>10s}:{:<4d}]")+format,__FILE__,__LINE__, ##__VA_ARGS__)
#define WARN(format, ...) Logger::GetLogger()->warn(std::string("[{:>10s}:{:<4d}]")+format,__FILE__,__LINE__, ##__VA_ARGS__)
#define ERR(format, ...) Logger::GetLogger()->error(std::string("[{:>10s}:{:<4d}]")+format,__FILE__,__LINE__, ##__VA_ARGS__)
};
```