如何将cerr和clog重新定义为两个tee到共享日志文件?

这里的一个相关问题显示了如何使用clog执行此操作: 如何重新定义阻塞发球到原始阻塞和日志文件? 现在的问题是如何同时为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);
    

要回复问题请先登录注册