有没有人有一个如何重新定义内置clog的C ++的例子,而是有一个新的关联rdbuf()被处理成原始clog.rdbuf()的t恤和ofstream对象的rdbuf()到磁盘上的日志文件。
目的是让代码始终使用std :: clog,但要将它转到默认的clog目标以及磁盘上的日志文件。
感谢。
- 威廉
答案 0 :(得分:2)
您必须编写自定义streambuf派生类。是否将数据吐出到你的ofstream的rdbuf和原来的clog rdbuf。
编写自定义streambuf的一般示例:
http://www.dreamincode.net/code/snippet2499.htm
可以按如下方式存储新的流缓冲区:
// grab buffer for clog
std::streambuf* oldClogBuf = std::clog.rdbuf();
// create custom buffer which feeds both clog and an ofstream
CustomBuffer* customBuf = new CustomBuffer( oldClogBuf );
// stash custom buffer
std::clog.rdbuf( customBuf );
...do stuff...
// restore original clog buffer
std::clog.rdbuf( oldClogBuf );
通过使用RAII习惯用来管理缓冲区切换,您可以使整个事情更加健壮。