此处的一个相关问题显示了如何仅使用阻塞来执行此操作:
现在的问题是如何同时为 cerr 执行此操作。对于上述问题,到 cerr 的输出不会出现在也需要它的日志文件中。
目标是无论去往 clog 或 cerr 的任何内容都会在日志文件中结束一次,因此 clog 和 cerr 都需要放到一个共享的日志文件中。
此处的一个相关问题显示了如何仅使用阻塞来执行此操作:
现在的问题是如何同时为 cerr 执行此操作。对于上述问题,到 cerr 的输出不会出现在也需要它的日志文件中。
目标是无论去往 clog 或 cerr 的任何内容都会在日志文件中结束一次,因此 clog 和 cerr 都需要放到一个共享的日志文件中。
此代码会将 std::cout 和 std::cerr 都重定向到输出文件:
// create an output stream
std::ofstream trace_log ( "/tmp/foo.log" );
// connect stream buffers
std::streambuf *coutbuf = std::cout.rdbuf();
std::cout.rdbuf(trace_log.rdbuf () );
std::streambuf *cerrbuf = std::cerr.rdbuf();
std::cerr.rdbuf(trace_log.rdbuf () );
// log
std::cout << "cout here" << std::endl;
std::cerr << "cerr here" << std::endl;
// restore
std::cout.flush ();
std::cout.rdbuf(cerrbuf);
std::cerr.flush ();
std::cerr.rdbuf(cerrbuf);