spdlog::rotating_logger_mt设置动态文件名
时间: 2024-09-15 21:05:47 浏览: 11
spdlog是一个跨平台的日志库,其中`rotating_logger_mt`是一个支持多线程的滚动日志记录器。如果你想要设置它的动态文件名,你需要在创建logger时提供一个函数或者一个lambda表达式,这个函数会在每次日志文件达到预设大小或者达到最大数量时返回新的文件名。
例如,你可以这样做:
```cpp
#include <spdlog/spdlog.h>
#include <spdlog/sinks/file_sink.h>
#include <spdlog/sinks/rotating_file_sink.h>
std::string get_new_log_file_path() {
// 这里可以编写逻辑生成一个新的文件名,如添加当前时间戳
std::time_t now = std::time(nullptr);
char buffer[80];
strftime(buffer, sizeof(buffer), "%Y%m%d%H%M%S", localtime(&now));
return "logs/log_" + std::to_string(now) + ".txt";
}
int main() {
auto logger = spdlog::stdout_logger_mt("dynamic_logger");
logger->sink(spdlog::sinks::rotating_file_sink_mt(get_new_log_file_path(), 10 * 1024 * 1024 /* 10MB */, 5)); // 每个文件最大10MB,最多保留5个文件
// 现在每当需要切换文件时,它会调用get_new_log_file_path()获取新路径
logger->info("This is a log message");
return 0;
}
```
在这个例子中,`get_new_log_file_path()`函数负责生成新的文件名,并将其作为参数传递给`rotating_file_sink_mt`。当日志文件大小超过10MB或达到5个文件限制时,旧的日志会被替换并生成新的文件。