【问题标题】:Adding times to logs在日志中添加时间
【发布时间】:2012-05-31 05:13:24
【问题描述】:

我在使用 SFML 1.6 制作游戏,有时会出现错误,当用户运行游戏时,我不希望控制台出现,所以我重定向了 stderr(SFML 用于显然记录错误)到以当前日期命名的文件中。因此,如果出现错误,用户只需检查日志即可。现在我还想把时间放在每个日志之前,所以日志文件看起来像这样:

12:34:17 CDT
failed to load image "sprite.png"

12:35:01 CDT
failed to load file "font.ttf"

有没有办法将当前时间“附加”到任何输出以获得上面显示的结果?

编辑

我忘了提一下,SFML 库是记录大部分错误的库,我想在它离开应用程序时添加时间,可以这么说。有点像收费站,除了任何离开的东西都会预先设定时间。我知道如何将时间作为字符串获取,而且我不是调用 printf 或任何其他类似函数的人。

【问题讨论】:

标签: c++ logging stderr sfml


【解决方案1】:

您可以做得比简单的重定向更好:您实际上可以在传入的字符流和写入文件之间插入自己的代码。

基本思想是从filebuf派生一个类,来控制放入的字符。

你有两种策略:

  • 简单的方法是每次读取\n 字符时设置一个标志,然后在第一个put 插入时间戳(并取消设置标志)
  • 困难的方法是缓冲输出直到遇到\n 字符,此时格式化时间戳,然后刷新缓冲区(直到\n

如果我们认为每行格式化的开始和结束之间没有太多时间,那么简单的方法应该足够可靠。

我认为覆盖 xsputn 应该足以完成工作。

【讨论】:

【解决方案2】:

如果您可以修改执行实际打印的函数,那么可以(我建议您查找函数timectimelocaltimestrftime)。如果你可以修改函数,那就不行。

【讨论】:

  • 我认为这发生在他们的图书馆中,我不想碰那些并冒着破坏某些东西的风险......
猜你喜欢
  • 2015-08-30
  • 2020-08-18
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
相关资源
最近更新 更多