1 背景

gabime/spdlog: Fast C++ logging library. (github.com)是一个效率很高的C++日志库,可以只引入头文件便可使用。

在使用spdlogmulti-sink方法时,如果其中一个sink是输出到文件的,那么可能会无法及时输出日志到文件,只有当程序关闭或有大量日志时才会写入。

即便设置了

spdlog::flush_on(log_level)
spdlog::flush_every(duration)

也依旧无法及时刷新。

2 原因

spdlog有全局管理的机制,如果自行声明的logger不是通过create方法创建的(如自行实例化),那么不会纳管到spdlog的管理集合中。进而flush_onflush_every不会及时生效。

3 解决方案

使用spdlog::register_logger方法,将自行实例化的logger纳入spdlog的管理范围。

或使用create方法创建。

此时flush_onflush_every机制生效。