0

此处的一个相关问题显示了如何仅使用阻塞来执行此操作:

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

现在的问题是如何同时为 cerr 执行此操作。对于上述问题,到 cerr 的输出不会出现在也需要它的日志文件中。

目标是无论去往 clog 或 cerr 的任何内容都会在日志文件中结束一次,因此 clog 和 cerr 都需要放到一个共享的日志文件中。

4

1 回答 1

1

此代码会将 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);
于 2010-12-25T23:02:55.827 回答