/workspace/S2/qt/Deploy_infer/MySpdlog.h:60: error: 'class MySpdlog' has no member named 'flush' 60 | MySpdlog::getInstace()->flush();}while(0) | ^~~~~
时间: 2024-03-21 11:39:53 浏览: 129
抱歉,之前给出的代码有误。`MySpdlog` 没有 `flush()` 成员函数,正确的写法应该是使用 `spdlog::flush_every(std::chrono::seconds(1))` 来设置日志刷新间隔时间,这样每隔一秒就会将缓冲区中的日志强制写入磁盘文件。具体的改动如下所示:
首先在初始化日志对象时,将第二个参数设置为同步模式:
```cpp
MySpdlog::getInstace()->init(true); // true 表示同步模式
```
然后在定义宏时,使用 `spdlog::flush_every()` 来设置日志刷新间隔时间:
```cpp
#define SPLOG_DEBUG(...) do {SPDLOG_LOGGER_DEBUG(MySpdlog::getInstace()->myLogger1, VA_ARGS);\ SPDLOG_LOGGER_DEBUG(MySpdlog::getInstace()->myLogger2, VA_ARGS);\ spdlog::flush_every(std::chrono::seconds(1));}while(0)
#define SPLOG_INFO(...) do {SPDLOG_LOGGER_INFO(MySpdlog::getInstace()->myLogger1, VA_ARGS);\ SPDLOG_LOGGER_INFO(MySpdlog::getInstace()->myLogger2, VA_ARGS);\ spdlog::flush_every(std::chrono::seconds(1));}while(0)
#define SPLOG_ERROR(...) do {SPDLOG_LOGGER_ERROR(MySpdlog::getInstace()->myLogger1, VA_ARGS);\ SPDLOG_LOGGER_ERROR(MySpdlog::getInstace()->myLogger2, VA_ARGS);\ spdlog::flush_every(std::chrono::seconds(1));}while(0)
```
这样就能够实现实时将日志写入文件的效果了。
阅读全文