生成一个复杂点的spdlog封装好的日志系统,要求打印的日志信息尽量详细,和生成具有自动轮换功能的日志文件等
时间: 2024-02-18 21:00:21 浏览: 108
qt封装的spdlog日志库
5星 · 资源好评率100%
好的!我可以为您提供一个使用spdlog进行封装的日志系统,具有详细的日志信息和自动轮换功能。
首先,我们需要安装spdlog库,可以通过以下命令进行安装:
```
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog
$ mkdir build && cd build
$ cmake .. && make -j
$ sudo make install
```
安装完spdlog后,我们可以开始编写封装好的日志系统代码。以下是一个简单的封装示例:
```cpp
#include <iostream>
#include <memory>
#include "spdlog/spdlog.h"
#include "spdlog/sinks/basic_file_sink.h"
class Logger {
public:
static void Init() {
std::vector<spdlog::sink_ptr> sinks;
sinks.push_back(std::make_shared<spdlog::sinks::stdout_color_sink_mt>());
sinks.push_back(std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/log.txt", true));
auto combined_logger = std::make_shared<spdlog::logger>("Logger", begin(sinks), end(sinks));
combined_logger->set_level(spdlog::level::trace);
combined_logger->flush_on(spdlog::level::trace);
spdlog::register_logger(combined_logger);
}
static std::shared_ptr<spdlog::logger>& GetLogger() {
static std::shared_ptr<spdlog::logger> logger = spdlog::get("Logger");
return logger;
}
};
int main() {
Logger::Init();
auto logger = Logger::GetLogger();
logger->trace("This is a trace message.");
logger->debug("This is a debug message.");
logger->info("This is an info message.");
logger->warn("This is a warning message.");
logger->error("This is an error message.");
logger->critical("This is a critical message.");
return 0;
}
```
在这个示例中,我们定义了一个`Logger`类,其中有一个`Init()`函数和一个`GetLogger()`函数。`Init()`函数用于初始化spdlog的日志系统,包括创建控制台输出和文件输出两个sinks,并将它们注册到一个名为“Logger”的logger中。我们还设置了日志级别为trace,这意味着所有级别的日志都将被记录。在`GetLogger()`函数中,我们返回了名为“Logger”的logger的共享指针。
在`main()`函数中,我们首先调用`Logger::Init()`来初始化日志系统,然后通过`Logger::GetLogger()`获取logger的共享指针。最后,我们使用logger记录了不同级别的日志信息。
这个示例中的日志信息将被同时输出到控制台和文件中,并且当日志文件大小超过指定大小时,将自动轮换日志文件。
希望这个封装示例能够帮助到您!
阅读全文