gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:40:38 27 4
gpt4 key购买 nike

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

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

谢谢。

-威廉

最佳答案

您必须编写一个自定义的 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 习惯用法来管理缓冲区切换,您可以使整个事情变得更加健壮。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com