我们有一个C++ Web 服务,它在每个请求上生成子进程。因此,每个孩子都会创建自己的日志文件。 我们将 cout 和 cerr 流绑定到一个文件中,以捕获所有 "std::cout" 和 "std::cerr"。
但是,该服务使用另一个"C"组件来执行一些旧操作。C 组件使用 "fprintf(stdout,xxx)" 和 "fprintf(stderr,xxx)" 来打印日志。
这些消息不会打印到"cout"和"cerr"日志文件中。相反,它会在提示中打印。我们需要这些 stdout/stderr 消息也转到相应的子日志文件。
有没有办法将"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
) 重定向到您选择的文件。