继this question之后,我注意到当调用这样的管道时,我的LogRotator
程序没有捕获两种类型的输出:
$ ./MyMainProgram | ./LogRotator
当我的
LogRotator
C++
程序无法捕获输出信息时,情况如下: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