我一直在想,堵塞有什么意义?据我所知, clog 与 cerr 相同,但具有缓冲功能,因此效率更高。通常stderr和stdout一样,所以clog和cout一样。这对我来说似乎很蹩脚,所以我想我一定是误解了它。如果我有日志消息发送到同一个地方,我有错误消息发送到(可能是/var/log/messages 中的某些内容),那么我可能不会写太多(因此使用 non 不会丢失太多-缓冲 cerr)。以我的经验,我希望我的日志消息是最新的(不缓冲),这样我可以帮助找到崩溃(所以我不想使用缓冲的阻塞)。显然我应该一直使用 cerr。
我希望能够在我的程序中重定向堵塞。重定向 cerr 会很有用,这样当我调用库例程时,我可以控制 cerr 和 clog 的去向。一些编译器可以支持这个吗?我刚刚检查了 DJGPP,stdout 被定义为 FILE 结构的地址,因此执行“stdout = freopen(...)”之类的操作是非法的。
- 是否可以重定向 clog、cerr、cout、stdin、stdout 和/或 stderr?
- clog 和 cerr 之间的唯一区别是缓冲吗?
- 我应该如何实现(或找到)更强大的日志记录工具(请提供链接)?
最佳答案
Is it possible to redirect clog, cerr, cout, stdin, stdout, and/or stderr?
是的。你想要 rdbuf
功能。
ofstream ofs("logfile");
cout.rdbuf(ofs.rdbuf());
cout << "Goes to file." << endl;
Is the only difference between clog and cerr the buffering?
据我所知,是的。
关于c++ - 堵塞的意义何在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52357/