BOOST_LOG_TRIVIAL(严重性)<< ...不会重定向到文件

时间:2016-02-23 15:18:53

标签: c++ redirect boost centos boost-log

我们正在使用最简单的boost.log v2版本 BOOST_LOG_TRIVIAL(严重性)<< ...

目前我们不想创建单独的接收器或输出文件,有时将控制台输出重定向到文件足以满足我们的目的。在使用boost.log v1.59的CentOs 7下,我们注意到很多次输出没有被重定向,而是在使用各种重定向选项(如<executable> 2>&1 out.txt等)时完全丢失。文件最终为零长度,没有屏幕输出自然地出现。

有人观察到这种行为吗?有没有已知的修复方法?非常感谢, filimon

3 个答案:

答案 0 :(得分:0)

谢谢,我已经看到琐碎的日志记录基本上是std :: cout这就是为什么我感到惊讶它没有按预期工作(我也向抱怨的同事解释了......)。日志输出在控制台上完美适用于我们。不确定你的意思是&#34;在应用程序或其父级中设置标准输出流&#34;,我只在我的main()

中进行

boost :: log :: core :: get() - &gt; set_filter(boost :: log :: trivial :: severity&gt; = vm [&#34; boost_log_level&#34;]。as());

并且只需执行BOOST_LOG_TRIVIAL(...)&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; ...

有哪些特定指针可以更详细地查看这些内容以进行调试?可能是一些线程相关的问题,我确实从一个线程得到了我的初始化消息,但似乎错过了另一个线程的那些,因为我说这只发生在重定向时,我很高兴地看到来自控制台中所有不同线程的消息...

答案 1 :(得分:0)

这是对不会发生的事情的解释。输出是缓冲的,这就是为什么你无法在文件中看到任何内容但可以在控制台中看到的内容。只需等待它达到4096字节。需要某种方法来刷新缓冲区...

答案 2 :(得分:-1)

语法2>&1 out.txt不是将输出重定向到文件的方式。如果要将stdout和stderr重定向到文件,则需要执行>& out.txt>out.txt 2>&1。所有shell都不支持第一种形式,但第二种形式应该是。