添加日志文件 及大小和文件数量
时间: 2024-01-19 19:02:25 浏览: 31
要添加日志文件大小和文件数量的限制,可以使用spdlog的Rotating File Sink。这个Sink可以根据文件大小和数量自动轮换日志文件。
以下是一个示例代码,演示如何使用Rotating File Sink记录日志:
```c++
#include <spdlog/spdlog.h>
#include <spdlog/sinks/rotating_file_sink.h>
class Logger {
public:
static Logger& instance() {
static Logger logger;
return logger;
}
template<typename... Args>
void info(const char* fmt, const Args&... args) {
m_logger->info(fmt, args...);
}
template<typename... Args>
void warn(const char* fmt, const Args&... args) {
m_logger->warn(fmt, args...);
}
template<typename... Args>
void error(const char* fmt, const Args&... args) {
m_logger->error(fmt, args...);
}
private:
std::shared_ptr<spdlog::logger> m_logger;
Logger() {
// 创建Rotating File Sink,限制单个日志文件大小为10MB,最多保留5个日志文件
auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("log", 10 * 1024 * 1024, 5);
// 创建logger,并添加Rotating File Sink
std::vector<spdlog::sink_ptr> sinks;
sinks.push_back(file_sink);
m_logger = std::make_shared<spdlog::logger>("logger", begin(sinks), end(sinks));
// 设置logger的格式化方式和日志级别
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%l%$] %v");
m_logger->set_level(spdlog::level::debug);
}
};
int main() {
// 使用Logger类记录日志
Logger::instance().info("Hello, {}!", "world");
Logger::instance().warn("Warning: {} is empty!", "file");
Logger::instance().error("Error: {} not found!", "config");
return 0;
}
```
在这个示例代码中,我们首先创建了一个Rotating File Sink,限制单个日志文件大小为10MB,最多保留5个日志文件。然后,我们创建了一个logger,并添加了这个Rotating File Sink。最后,我们设置了logger的格式化方式和日志级别。
在main函数中,我们通过Logger::instance()方法获取Logger类的单例对象,然后调用其方法记录日志。这些日志将被写入到log文件中,当log文件大小超过10MB时,将自动创建一个新的日志文件,并删除最旧的日志文件,以保留最多5个日志文件。