【发布时间】:2021-12-24 19:19:57
【问题描述】:
简单地说,我正在尝试创建一个链接到文件std::ofstream outFile{pathToFile, std::ios_base::app}; 的流。该文件是一个日志文件,理想情况下,它将接收 stderr 和 stdout 的副本。例如,当发生错误时,该错误将打印在控制台和文件中。
我尝试过使用freopen(pathToFile, "a+", stderr); 和std::cerr.rdbuf(outFile.rdbuf());,但是,它们都完全重定向了输出,类似于bash 中的管道。我也想在控制台看到错误。
对 C++ 流有点陌生,我不太确定如何实现这一点。我会看到它以另一种语言完成的方式是“订阅”stderr,因此每次stderr 更改和更新时都会通知我的原始流。另一种方法是覆盖stderr,登录到我的文件并调用原始文件,但由于程序员本身通常不调用stderr,我不确定我该怎么做。
需要注意的是,我使用的是windows,所以无法访问unistd.h。我还想避免使用STL 或第三方库。
【问题讨论】: