1 背景
gabime/spdlog: Fast C++ logging library. (github.com)是一个效率很高的C++日志库,可以只引入头文件便可使用。
在使用spdlog的multi-sink方法时,如果其中一个sink是输出到文件的,那么可能会无法及时输出日志到文件,只有当程序关闭或有大量日志时才会写入。
即便设置了
spdlog::flush_on(log_level)
spdlog::flush_every(duration)也依旧无法及时刷新。
2 原因
spdlog有全局管理的机制,如果自行声明的logger不是通过create方法创建的(如自行实例化),那么不会纳管到spdlog的管理集合中。进而flush_on和flush_every不会及时生效。
3 解决方案
使用spdlog::register_logger方法,将自行实例化的logger纳入spdlog的管理范围。
或使用create方法创建。
此时flush_on和flush_every机制生效。