C++:Linux:从除“cout”以外的多个线程或流管道到我的程序
C++: Linux: Pipe to my program from multiple threads or streams other than `cout`
在 之后,我注意到当调用这样的管道时,我的 LogRotator
程序没有捕获到两种类型的输出:
$ ./MyMainProgram | ./LogRotator
我的LogRotator
C++
程序没有捕捉到输出信息的情况是:
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
在 LogRotator
程序没有捕获到两种类型的输出:
$ ./MyMainProgram | ./LogRotator
我的LogRotator
C++
程序没有捕捉到输出信息的情况是:
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