如何将 clog 的 rdbuf() 重新定义为 clog 的原始 rdbuf() 和日志文件的 rdbuf()?
有没有人有一个示例,说明如何重新定义 clog 中内置的 C++,以改为拥有一个新的关联 rdbuf(),该 rdbuf() 被处理为原始 clog.rdbuf() 的 tee 以及 ofstream 对象到日志的 rdbuf()磁盘上的文件。
目的是让代码自始至终都使用 std::clog,但让它转到默认的 clog 目标以及磁盘上的日志文件。
谢谢。
-威廉
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您必须编写一个自定义的streambuf 派生类。 让它将数据吐出到 ofstream 的 rdbuf 和原始 clog rdbuf 中。
编写自定义streambuf的一般示例:
http://www.dreamincode.net/code/snippet2499 .htm
可以按如下方式存储新的流缓冲区:
您可以通过使用 RAII 习惯用法来管理缓冲区切换,从而使整个过程更加健壮。
You will have to write a custom streambuf derived class. Have it spit out data to to both your ofstream's rdbuf and your original clog rdbuf.
A general example of writing a custom streambuf:
http://www.dreamincode.net/code/snippet2499.htm
Stashing the new stream buffer can be done as follows:
You can make the whole thing more robust by using the RAII idiom to manage the buffer switching.