2016-02-23 25 views
1

我们使用boost.log V2的简单版本 BOOST_LOG_TRIVIAL(严重)< < ...BOOST_LOG_TRIVIAL(严重)<< ......不重定向到文件

目前我们不会喜欢创建一个单独的接收器或输出文件,有时将控制台输出重定向到一个文件对我们来说已经足够了。在使用boost.log v1.59的CentOs 7下,我们已经注意到很多时候输出没有重定向,但是在使用各种重定向选项(如<executable> 2>&1 out.txt等)时完全丢失。文件以零长度结束,并且自然不存在屏幕输出。

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

回答

-1

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

+1

谢谢,这只是一个例子,没有任何已知的重定向方法工程尝试许多不同的有经验的UNIX用户。所以这个问题与这个语法无关。我们经常使用其他std :: cout或std :: cerr语句重定向输出,因为这些年来没有问题... – filimon

+0

Boost.Log中的默认接收器将输出写入标准输出,如代码中所示,所以问题显然有些问题如何重定向输出或如何在应用程序或其父级中设置标准输出流。另外,验证日志实际上是由应用程序写入的,而不是,例如过滤掉。 –

0

谢谢,我已经看到,微不足道的日志记录基本上是std :: cout,这就是为什么我感到惊讶它不能按预期工作(并且我还向那些抱怨的同事解释了它)。日志记录输出在控制台上完美地适用于我们。不知道你的意思是“在应用程序或其父代中设置标准输出流”,我只在我的main()函数中执行boost :: log :: core :: get() - > set_filter(boost: :log :: trivial :: severity> = vm [“boost_log_level”]。as());

,这将按预期的控制台严重性级别的不同命令行设置简单地做BOOST_LOG_TRIVIAL(...)< <当...

在哪里看更详细任何特定指针调试这个?它可能是一些线程相关的问题,我从一个线程得到我的初始化消息,但似乎错过了另一个线程的,因为我说这只发生在重定向时,我可以愉快地看到来自控制台中所有不同线程的消息...

+0

我的意思是“在应用程序或其父项中设置标准输出流”是,如果你使用'fork' +'exec'从另一个进程运行你的应用程序,那么你应该看看你是否正在做一些特殊的事情标准的IO描述符也是如此。 –

+0

嗨,我们实际上是这样开始的:crontab script1.sh - > script2.sh在script2.sh中我们有nohup进程>> log.txt 2>&1&。 nohup可以解决这个问题吗?有没有办法将库中的流替换为控制台输出的stderr而不是stdout? – filimon

+0

是的,nohup可能是原因。看到它的手册页。 http://linux.die.net/man/1/nohup –

0

这是解释发生的事情不是可以做什么。输出缓冲,这就是为什么你不能看到文件中的任何东西,但可以在控制台中看到。等待它达到4096字节。需要一些刷新缓冲区的方法...