我对 Boost.Log 库有点陌生,第一印象非常好,但有一件事已经花费了很多时间,我无法解决。我想让 Boost.Log 立即将每条消息写入日志文件。我知道其他问题(I,II,III),但是它们没有帮助。考虑来自 boost docs 的这个例子,下一个代码是相同的,除了我设置auto_flush
为true
:
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
void init()
{
// Construct the sink
typedef sinks::synchronous_sink< sinks::text_ostream_backend > text_sink;
boost::shared_ptr< text_sink > sink = boost::make_shared< text_sink >();
// Add a stream to write log to
sink->locked_backend()->add_stream(
boost::make_shared< std::ofstream >("sample.log")); //1
sink->locked_backend()->auto_flush(true);
// Register the sink in the logging core
logging::core::get()->add_sink(sink);
}
int main(int, char*[])
{
init();
src::logger lg;
BOOST_LOG(lg) << "Hello world!";
return 0;
}
在调试时,sample.log
执行第一个命令(//1)后会创建一个空,但是在执行 BOOST_LOG 后,日志文件仍然是空的,只有在return
语句之后,Hello world!
才会将其写入日志文件。
感谢帮助!