添加日志时间

时间:2012-05-31 05:13:24

标签: c++ logging stderr sfml

我正在使用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或任何其他函数的人。

2 个答案:

答案 0 :(得分:2)

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

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

您有两种策略:

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

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

我认为重写xsputn应该足以完成工作。

答案 1 :(得分:0)

如果您可以修改执行实际打印的功能,那么是(我建议您查找功能timectimelocaltimestrftime)。如果你可以修改该功能,那么没有。