有没有人举过一个例子,说明如何重新定义内置在clog中的C++,以使其具有一个新的关联rdbuf(),该rdbuf()被处理为原始clog.rdbuf()和astream对象的rdbuf()的日志。磁盘上的文件。

目的是使代码始终使用std::clog,但要使其同时到达默认的clog目标以及磁盘上的日志文件。

谢谢。

-威廉

最佳答案

您将必须编写一个自定义的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习惯来管理缓冲区切换,从而使整个过程变得更加健壮。

关于c++ - 如何重新定义Clog的rdbuf()到Clog的原始rdbuf()和日志文件的tee?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/942399/

10-12 21:33