this question之后,我注意到当调用这样的管道时,我的LogRotator程序没有捕获两种类型的输出:

$ ./MyMainProgram | ./LogRotator

当我的LogRotatorC++程序无法捕获输出信息时,情况如下:
1-从MyMainProgram开始时,我使用的流不是std::cout。例如,std::clog
2-当MyMainProgram使用多个线程时。在MyMainProgram中,我使用boost::thread_group,新线程中的所有内容都不会被std::cout捕获。
在linux中,当进行这样的调用时,此行为是正常的:
./MyMainProgram > log.txt

但这可以通过电话解决
./MyMainProgram > log.txt 2> stderr_log.txt

我怎样才能用管道的方法解决这个问题,这样我的旋转器就能捕捉到所有的东西?

最佳答案

这将在管道输送至测井旋转器之前将STDERR合并到STDOUT:

./MyMainProgram 2>&1 | ./LogRotator

07-24 15:05