问题标签 [clog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
618 浏览

c++ - 为什么我的堵塞物不粘住?

我想我没能理解 C++ 的一些更好的点。我想建立一个我的程序做了什么的日志,并且发现了std::clog,这似乎在理论上做了我想要的,但实际上它没有。

如果我执行以下操作,clog 会按预期工作并将“Test 1”写入屏幕,“Test 2”会显示在文件中:

但是如果我把所有这些都放到一个类中,那么“Test 1”会被写入屏幕,test.log 会被创建,但里面什么都没有,“Test 2”也找不到!:

我错过了什么?

编辑:如果我在 valgrind 中运行后者,我会收到这样的错误(前者运行干净):

我并没有令人讨厌地认为我(一个普通的程序员)在这么简单的程序中发现了一个编译器错误,但这让我更加困惑,valgrind 显然发现后者在某种程度上是错误的,即使我试图让它们在功能上相同。

0 投票
4 回答
2705 浏览

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

我在这里看到了一个有用的开始:

http://www.cs.technion.ac.il/~imaman/programs/teestream.html

并且它非常适合制作一个同时进入 clog 和日志文件的新流。

但是,如果我尝试将 clog 重新定义为新流,则它不起作用,因为新流具有与 clog 相同的 rdbuf() ,因此以下内容无效:

那么如何修改 tee 类以拥有自己的 rdbuf() ,然后它可以成为阻塞的目标?

谢谢。

-威廉

0 投票
1 回答
928 浏览

c++ - 如何将 clog 的 rdbuf() 重新定义为 clog 的原始 rdbuf() 和日志文件的 tee?

有没有人有一个如何重新定义 C++ 内置 clog 的例子,而不是有一个新的关联 rdbuf(),它被处理为原始 clog.rdbuf() 的 tee 和 ofstream 对象的 rdbuf() 到日志磁盘上的文件。

目的是让代码在整个过程中使用 std::clog,但让它同时进入默认的 clog 目标以及磁盘上的日志文件。

谢谢。

-威廉

0 投票
4 回答
20849 浏览

c++ - 将 C++ std::clog 重定向到 Unix 上的 syslog

我在 Unix 上开发一个将消息发送到 syslog 的 C++ 程序。

当前代码使用类似于 printf的syslog系统调用。

现在我更愿意为此目的使用流,通常是内置的std::clog。但是 clog 只是将输出重定向到 stderr,而不是 syslog,这对我来说没用,因为我还将 stderr 和 stdout 用于其他目的。

我在另一个答案 中看到,使用 rdbuf() 将其重定向到文件很容易,但我认为无法应用该方法来调用 syslog,因为 openlog 不返回我可以用来在其上绑定流的文件处理程序.

还有另一种方法吗?(对于unix编程来说看起来很基础)?

编辑:我正在寻找不使用外部库的解决方案。@Chris 提出的建议可能是一个好的开始,但要成为公认的答案仍然有点模糊。

编辑:使用 Boost.IOStreams 是可以的,因为我的项目已经使用了 Boost。

与外部库链接是可能的,但也是一个问题,因为它是 GPL 代码。依赖关系也是一种负担,因为它们可能与其他组件发生冲突,在我的 Linux 发行版上不可用,引入第三方错误等。如果这是唯一的解决方案,我可能会考虑完全避免流......(可惜)。

0 投票
1 回答
1864 浏览

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

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

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

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

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

0 投票
5 回答
6610 浏览

c++ - 我可以给出一个流来在 C++ 中的数字上打印前导零的指令是什么?

我知道如何使它成为十六进制:

现在,如果 myNum 只需要一位数字,我希望它始终打印前导零:

那么我该怎么做呢?

0 投票
2 回答
554 浏览

c++ - 如何检测由于磁盘已满而导致的未处理异常?

我的应用程序遇到了磁盘已满错误,不知何故,由于磁盘已满,引发了未处理的异常,导致set_terminate()处理程序被调用。

通常,我会在我的日志文件中获得某种堆栈跟踪,这样我就可以看到出了什么问题,但是,在这种情况下,由于磁盘已满,没有记录堆栈跟踪,并且不清楚程序是否由于以下原因而终止磁盘空间不足。

从最后写入磁盘的内容中读取我可以读取的内容,它似乎std::clog正在被写入,已设置为进入磁盘(已满的那个)。

我想知道使用operator<<to write toclog是否会导致抛出异常,如果是这样,可能会抛出什么异常?

此外,我对如何改进我的应用程序的想法很感兴趣,如果这种情况在未来再次发生,我可能会更新我的应用程序,以便更好地跟踪到底出了什么问题,这样我就可以知道磁盘已满并且不是应用程序的其他缺点。

然而,关键问题是检测故障,没有它,如何缓解的想法是没有用的。

0 投票
1 回答
1902 浏览

c++ - c++中什么时候使用以及clog和cerr的区别

我什么时候在 C++ 中使用std::clog和?std::cerr

clog << "test" << endl;和 有什么区别cerr << "test" << endl;

clog << "0"不用endl缓冲区直接打印吗?

0 投票
7 回答
78233 浏览

c++ - c++中iostream标头的cout,cerr,clog有什么区别?什么时候用哪一个?

我尝试在互联网上研究和之间的区别cout,但找不到完美的答案。我仍然不清楚何时使用哪个。谁能通过简单的程序向我解释并说明何时使用哪一个的完美情况?cerrclog

我访问了这个站点cerr,它在and上显示了一个小程序clog,但是在那里获得的输出也可以使用cout. 所以,我对每个人的确切用途感到困惑。

0 投票
3 回答
195 浏览

c++ - 考虑到下面的 C++ 程序,应该插入什么来代替 //***** 以确保 100% 干净关闭?

这是一道考试题:

考虑到下面的 C++ 程序,应该插入什么 //*****来确保 100% 干净关闭?

  • A. 什么都没有。
  • B. 退出();
  • C. clog.rdbuf(clog_buf);
  • D. clog.rdbuf(0);
  • E.log.rdbuf(0);

我对这段代码的使用log和使用感到困惑。clog为什么我们不能只创建一个文件并写下我们需要的所有内容?任何解释将不胜感激。