作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里的一个相关问题展示了如何只用木屐来做到这一点:
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/
我是一名优秀的程序员,十分优秀!