c++ - 堵塞的意义何在?

标签 c++ logging log4cpp

我一直在想,堵塞有什么意义?据我所知, 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/

相关文章:

c++ - 如何在 log4cpp 属性文件中使用环境变量

c++ - 'long long long' 对于使用 log4cpp 的 GCC 来说太长了

c++ - 使用邻接矩阵进行图形着色

c# - 如何获取最后插入的记录

c++ - Windows 窗体 - 单实例 - 包含语句

java - log4j.properties 文件中 log4j.rootLogger 属性的意义是什么?如果我不使用此属性会怎样?

logging - 如何使用 log4rs 更改正在运行的进程的日志级别?

c++ - 在 Qt 5.3 中向工具栏添加图标

c++ - 以排序方式遍历 std::vector<std::pair<T,U>> 对象