C++:Linux:从除“cout”以外的多个线程或流管道到我的程序

C++: Linux: Pipe to my program from multiple threads or streams other than `cout`

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

$ ./MyMainProgram | ./LogRotator

我的LogRotatorC++程序没有捕捉到输出信息的情况是:

1- 从 MyMainProgram 开始,我使用 std::cout 以外的流。例如,std::clog.

2-当MyMainProgram使用多线程时。在 MyMainProgram 中我使用 boost::thread_group,我在新线程中 std::cout 的所有内容都不会被 LogRotator.

捕获

在 linux 进行这样的调用时,这种行为是正常的:

./MyMainProgram > log.txt

但是这可以通过调用

来解决
./MyMainProgram > log.txt 2> stderr_log.txt

如何使用管道以同样的方式解决这个问题,以便我的 LogRotator 捕获所有内容?

这将在管道传输到 LogRotator 之前将 STDERR 合并到 STDOUT 中:

./MyMainProgram 2>&1 | ./LogRotator