spdlog新建日志文件,而不是追加写入
时间: 2023-08-16 17:06:00 浏览: 631
可以通过设置spdlog的basic_file_sink来实现每次写日志都覆盖之前的日志,而不是追加写入。具体步骤如下:
1. 导入头文件:`#include "spdlog/sinks/basic_file_sink.h"`
2. 创建basic_file_sink对象,设置日志文件名和覆盖模式。例如:
```cpp
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log.txt", true);
```
其中,日志文件名为log.txt,覆盖模式为true(默认为false,即追加模式)。
3. 创建logger对象,将basic_file_sink对象添加到logger中。例如:
```cpp
auto logger = std::make_shared<spdlog::logger>("my_logger", file_sink);
```
4. 设置logger的全局格式和日志级别。例如:
```cpp
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%l%$] [thread %t] %v");
spdlog::set_level(spdlog::level::trace);
```
5. 使用logger进行日志输出。例如:
```cpp
logger->info("Hello, world!");
```
这样,每次写日志都会覆盖之前的日志内容。需要注意的是,使用覆盖模式会导致之前的日志信息丢失,不建议在生产环境中使用。如果需要在每次启动时清空之前的日志文件,可以在创建basic_file_sink对象时设置truncate参数为true。例如:
```cpp
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log.txt", true, true);
```
这样,每次启动进程时都会新建一个日志文件,并清空之前的日志内容。
阅读全文