1

有没有人有一个如何重新定义 C++ 内置 clog 的例子,而不是有一个新的关联 rdbuf(),它被处理为原始 clog.rdbuf() 的 tee 和 ofstream 对象的 rdbuf() 到日志磁盘上的文件。

目的是让代码在整个过程中使用 std::clog,但让它同时进入默认的 clog 目标以及磁盘上的日志文件。

谢谢。

-威廉

4

1 回答 1

2

您将不得不编写一个自定义的 streambuf 派生类。让它向你的 ofstream 的 rdbuf 和你原来的阻塞 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 习惯用法来管理缓冲区切换,从而使整个事情变得更加健壮。

于 2009-06-14T21:26:06.617 回答