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