如何将 clog 的 rdbuf() 重新定义为 clog 的原始 rdbuf() 和日志文件的 rdbuf()?

发布于 2024-07-23 05:34:01 字数 219 浏览 5 评论 0原文

有没有人有一个示例,说明如何重新定义 clog 中内置的 C++,以改为拥有一个新的关联 rdbuf(),该 rdbuf() 被处理为原始 clog.rdbuf() 的 tee 以及 ofstream 对象到日志的 rdbuf()磁盘上的文件。

目的是让代码自始至终都使用 std::clog,但让它转到默认的 clog 目标以及磁盘上的日志文件。

谢谢。

-威廉

Does anyone have an example of how to redefine the C++ built in clog to instead have a new associated rdbuf() which is processed to be a tee to the original clog.rdbuf() and the rdbuf() of a ofstream object to a log file on disk.

The intention is to have the code use the std::clog throughout but to have it go to the both the default clog destination as well as to a log file on disk.

Thanks.

-William

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

荆棘i 2024-07-30 05:34:01

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

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:

// 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 );

You can make the whole thing more robust by using the RAII idiom to manage the buffer switching.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文