如何从 C++ 程序将 "cout"、"cerr"、"stdout" 和 "stderr" 定向到单个文件
How can i direct "cout", "cerr", "stdout" and "stderr" to a single file from a C++ program
我们有一个 C++ Web 服务,它在每个请求上生成 child 进程。因此,每个 child 都会创建自己的日志文件。
我们将 cout 和 cerr 流绑定到一个文件以捕获所有 "std::cout" 和 "std::cerr".
但是,该服务使用另一个 "C" 组件来执行一些遗留操作。 C 组件使用 "fprintf(stdout,xxx)" 和 "fprintf(stderr,xxx)" 来打印日志。
这些消息没有打印到 "cout" 和 "cerr" 日志文件中。相反,它会在提示中打印出来。我们需要那些 stdout/stderr 消息也转到相应的 child 日志文件。
有没有一种方法可以将 "stdout" 和 "stderr" 也绑定到绑定了 "cout" 和 "cerr" 的同一个文件。
有类似的问题,但没有多语言代码混合的例子。
告诉我。
谢谢
默认情况下 std::cin
/std::cout
/std::cerr
/std::clog
绑定到 stdin
、stdout
和 stderr
分别。正确的做法是重定向 C 层,C++ 层会自行处理。
如果您使用的是 POSIX 系统,只需使用 dup2()
系统调用重定向 fd 的 0 (stdin
)、1 (stdout
) 和2 (stderr
) 到您选择的文件。
我们有一个 C++ Web 服务,它在每个请求上生成 child 进程。因此,每个 child 都会创建自己的日志文件。 我们将 cout 和 cerr 流绑定到一个文件以捕获所有 "std::cout" 和 "std::cerr".
但是,该服务使用另一个 "C" 组件来执行一些遗留操作。 C 组件使用 "fprintf(stdout,xxx)" 和 "fprintf(stderr,xxx)" 来打印日志。
这些消息没有打印到 "cout" 和 "cerr" 日志文件中。相反,它会在提示中打印出来。我们需要那些 stdout/stderr 消息也转到相应的 child 日志文件。
有没有一种方法可以将 "stdout" 和 "stderr" 也绑定到绑定了 "cout" 和 "cerr" 的同一个文件。
有类似的问题,但没有多语言代码混合的例子。
告诉我。
谢谢
默认情况下 std::cin
/std::cout
/std::cerr
/std::clog
绑定到 stdin
、stdout
和 stderr
分别。正确的做法是重定向 C 层,C++ 层会自行处理。
如果您使用的是 POSIX 系统,只需使用 dup2()
系统调用重定向 fd 的 0 (stdin
)、1 (stdout
) 和2 (stderr
) 到您选择的文件。