gpt4 book ai didi

c++ - 如何将 cerr 和 clog 重新定义为共享日志文件?

转载 作者:行者123 更新时间:2023-11-28 08:24:27 25 4
gpt4 key购买 nike

这里的一个相关问题展示了如何只用木屐来做到这一点:

How to redefine clog to tee to original clog and a log file?

现在的问题是如何同时为 cerr 执行此操作。有了上面的问题,输出到 cerr 并没有最终出现在日志文件中也需要它的地方。

目标是不管 clog 还是 cerr 都只在日志文件中结束一次,所以 clog 和 cerr 都需要被传送到一个共享的日志文件。

最佳答案

此代码会将 std::cout 和 std::cerr 重定向到输出文件:

// create an output stream
std::ofstream trace_log ( "/tmp/foo.log" );

// connect stream buffers
std::streambuf *coutbuf = std::cout.rdbuf();
std::cout.rdbuf(trace_log.rdbuf () );

std::streambuf *cerrbuf = std::cerr.rdbuf();
std::cerr.rdbuf(trace_log.rdbuf () );

// log
std::cout << "cout here" << std::endl;
std::cerr << "cerr here" << std::endl;

// restore
std::cout.flush ();
std::cout.rdbuf(cerrbuf);

std::cerr.flush ();
std::cerr.rdbuf(cerrbuf);

关于c++ - 如何将 cerr 和 clog 重新定义为共享日志文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530751/

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