Boost.Log在每个日志记录语句之后刷新
Boost.Log flush after each logging statement
我对Boost.Log库有点陌生,第一印象真的很好,但有一件事已经花了很多小时,我无法解决。我想制作Boost.Llog,立即将每条消息写入日志文件。我知道其他问题(I、II、III),但它们没有帮助。考虑boost文档中的这个例子,下一个代码是相同的,只是我已经将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;
}
调试时,执行第一个命令(//1)后会创建一个空的sample.log
,但执行BOOST_LOG后,日志文件仍然为空,只有在return
语句后,Hello world!
才会写入日志文件。
谢谢你的帮助!
我做了一些研究。考虑下一个更改的main
功能:
int main(int, char*[])
{
init();
src::logger lg;
BOOST_LOG(lg) << "Hello world #1!";
BOOST_LOG(lg) << "Hello world #2!";
std::cin.get();
BOOST_LOG(lg) << "Hello world #3!";
BOOST_LOG(lg) << "Hello world #4!";
return 0;
}
因此,std::cin.get()
充当暂停,在正常模式下启动应用程序(无需调试,从VS2008中按Ctrl+F5,或简单地从Debug
文件夹中执行*.exe
),当您到达输入部分(std::cin.get()
)时,只需转到任务管理器并终止进程。根据auto_flush
的值,结果如下:
auto_flush(false)
-日志文件为空auto_flush(true)
—日志文件将包含在std::cin.get()
之前生成的前两条记录
将std::cin.get()
更改为throw 1
总是会将前两条记录写入日志文件,这与Release
和Debug
构建中的auto_flush
是否都设置为true
或false
有关。
因此,结论是auto_flush
运行良好,只是在直接从Visual Studio进行调试时有一点奇怪的行为。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- 将两个数组中的差异记录在第三个数组中
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 我似乎对if/else的基本语句有问题:/
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- C++-根据级别记录语句
- QRCodeSignature类不允许记录语句
- Boost.Log在每个日志记录语句之后刷新
- 如何在 android L 上加载 OpenCV 时删除日志记录语句
- 为什么我的 read 语句不记录二进制数据
- 一个方便的C++日志记录语句,使用boost::格式
- Log4cxx日志记录语句挂起