问题标签 [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.
c++ - 为什么我的堵塞物不粘住?
我想我没能理解 C++ 的一些更好的点。我想建立一个我的程序做了什么的日志,并且发现了std::clog
,这似乎在理论上做了我想要的,但实际上它没有。
如果我执行以下操作,clog 会按预期工作并将“Test 1”写入屏幕,“Test 2”会显示在文件中:
但是如果我把所有这些都放到一个类中,那么“Test 1”会被写入屏幕,test.log 会被创建,但里面什么都没有,“Test 2”也找不到!:
我错过了什么?
编辑:如果我在 valgrind 中运行后者,我会收到这样的错误(前者运行干净):
我并没有令人讨厌地认为我(一个普通的程序员)在这么简单的程序中发现了一个编译器错误,但这让我更加困惑,valgrind 显然发现后者在某种程度上是错误的,即使我试图让它们在功能上相同。
c++ - 如何将 clog 重新定义为原始 clog 和日志文件?
我在这里看到了一个有用的开始:
http://www.cs.technion.ac.il/~imaman/programs/teestream.html
并且它非常适合制作一个同时进入 clog 和日志文件的新流。
但是,如果我尝试将 clog 重新定义为新流,则它不起作用,因为新流具有与 clog 相同的 rdbuf() ,因此以下内容无效:
那么如何修改 tee 类以拥有自己的 rdbuf() ,然后它可以成为阻塞的目标?
谢谢。
-威廉
c++ - 如何将 clog 的 rdbuf() 重新定义为 clog 的原始 rdbuf() 和日志文件的 tee?
有没有人有一个如何重新定义 C++ 内置 clog 的例子,而不是有一个新的关联 rdbuf(),它被处理为原始 clog.rdbuf() 的 tee 和 ofstream 对象的 rdbuf() 到日志磁盘上的文件。
目的是让代码在整个过程中使用 std::clog,但让它同时进入默认的 clog 目标以及磁盘上的日志文件。
谢谢。
-威廉
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 发行版上不可用,引入第三方错误等。如果这是唯一的解决方案,我可能会考虑完全避免流......(可惜)。
c++ - 如何将 cerr 和 clog 重新定义为 tee 到共享日志文件?
此处的一个相关问题显示了如何仅使用阻塞来执行此操作:
现在的问题是如何同时为 cerr 执行此操作。对于上述问题,到 cerr 的输出不会出现在也需要它的日志文件中。
目标是无论去往 clog 或 cerr 的任何内容都会在日志文件中结束一次,因此 clog 和 cerr 都需要放到一个共享的日志文件中。
c++ - 我可以给出一个流来在 C++ 中的数字上打印前导零的指令是什么?
我知道如何使它成为十六进制:
现在,如果 myNum 只需要一位数字,我希望它始终打印前导零:
那么我该怎么做呢?
c++ - 如何检测由于磁盘已满而导致的未处理异常?
我的应用程序遇到了磁盘已满错误,不知何故,由于磁盘已满,引发了未处理的异常,导致set_terminate()
处理程序被调用。
通常,我会在我的日志文件中获得某种堆栈跟踪,这样我就可以看到出了什么问题,但是,在这种情况下,由于磁盘已满,没有记录堆栈跟踪,并且不清楚程序是否由于以下原因而终止磁盘空间不足。
从最后写入磁盘的内容中读取我可以读取的内容,它似乎std::clog
正在被写入,已设置为进入磁盘(已满的那个)。
我想知道使用operator<<
to write toclog
是否会导致抛出异常,如果是这样,可能会抛出什么异常?
此外,我对如何改进我的应用程序的想法很感兴趣,如果这种情况在未来再次发生,我可能会更新我的应用程序,以便更好地跟踪到底出了什么问题,这样我就可以知道磁盘已满并且不是应用程序的其他缺点。
然而,关键问题是检测故障,没有它,如何缓解的想法是没有用的。
c++ - c++中什么时候使用以及clog和cerr的区别
我什么时候在 C++ 中使用std::clog
和?std::cerr
clog << "test" << endl;
和 有什么区别cerr << "test" << endl;
?
clog << "0"
不用endl
缓冲区直接打印吗?
c++ - c++中iostream标头的cout,cerr,clog有什么区别?什么时候用哪一个?
我尝试在互联网上研究和之间的区别cout
,但找不到完美的答案。我仍然不清楚何时使用哪个。谁能通过简单的程序向我解释并说明何时使用哪一个的完美情况?cerr
clog
我访问了这个站点cerr
,它在and上显示了一个小程序clog
,但是在那里获得的输出也可以使用cout
. 所以,我对每个人的确切用途感到困惑。
c++ - 考虑到下面的 C++ 程序,应该插入什么来代替 //***** 以确保 100% 干净关闭?
这是一道考试题:
考虑到下面的 C++ 程序,应该插入什么
//*****
来确保 100% 干净关闭?
- A. 什么都没有。
- B. 退出();
- C. clog.rdbuf(clog_buf);
- D. clog.rdbuf(0);
- E.log.rdbuf(0);
我对这段代码的使用log
和使用感到困惑。clog
为什么我们不能只创建一个文件并写下我们需要的所有内容?任何解释将不胜感激。