此处的相关问题显示了如何使用clog执行此操作:
How to redefine clog to tee to original clog and a log file?
现在的问题是如何同时为cerr做这件事。有了上面的问题,输出到cerr不会在日志文件中结束,也需要它。
目标是无论是clog还是cerr,都会在日志文件中结束一次,因此需要将clog和cerr都转换为共享日志文件。
答案 0 :(得分:1)
此代码会将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);