请详细封装设计一个spdlog日志系统
时间: 2023-12-29 08:05:24 浏览: 154
好的,下面是一个使用spdlog库封装的日志系统的示例代码:
```cpp
#include <spdlog/spdlog.h>
#include <spdlog/sinks/basic_file_sink.h>
class Logger
{
public:
enum class Level
{
Trace,
Debug,
Info,
Warn,
Error,
Critical,
Off
};
static void init(const std::string& filename, Level level = Level::Debug)
{
auto logger = spdlog::basic_logger_mt("logger", filename);
spdlog::set_default_logger(logger);
spdlog::set_level(static_cast<spdlog::level::level_enum>(level));
}
static std::shared_ptr<spdlog::logger> get()
{
return spdlog::default_logger();
}
};
#define LOG_TRACE(...) Logger::get()->trace(__VA_ARGS__)
#define LOG_DEBUG(...) Logger::get()->debug(__VA_ARGS__)
#define LOG_INFO(...) Logger::get()->info(__VA_ARGS__)
#define LOG_WARN(...) Logger::get()->warn(__VA_ARGS__)
#define LOG_ERROR(...) Logger::get()->error(__VA_ARGS__)
#define LOG_CRITICAL(...) Logger::get()->critical(__VA_ARGS__)
```
首先,我们包含了必要的头文件,包括spdlog和basic_file_sink头文件,用于向文件中记录日志。
接下来,我们定义了一个Logger类,它有一个公共的init函数,用于初始化日志系统。该函数接受一个文件名和一个日志级别参数。在该函数中,我们创建了一个基本的文件日志器,并将其设置为默认日志器。我们还设置了日志级别,该级别将转换为spdlog的level_enum类型。
接下来,我们定义了一组宏,用于记录不同级别的日志。这些宏调用spdlog默认日志器的相应函数,如trace、debug、info、warn、error和critical。这些宏可以在我们的应用程序中的任何地方使用,以记录相应级别的日志。
最后,我们使用这些宏来记录日志。例如:
```cpp
int main()
{
Logger::init("logs/log.txt", Logger::Level::Debug);
LOG_INFO("Starting application...");
LOG_DEBUG("Some debug information...");
LOG_WARN("A warning message...");
LOG_ERROR("An error occurred!");
LOG_CRITICAL("A critical error occurred!");
return 0;
}
```
这将初始化我们的日志系统,并使用LOG_INFO、LOG_DEBUG、LOG_WARN、LOG_ERROR和LOG_CRITICAL宏记录不同级别的日志。这些日志将被记录在“logs/log.txt”文件中。
希望这个封装的示例代码可以帮助您设计一个高级的spdlog日志系统。
阅读全文