我正在使用 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 或任何其他类似函数的人。
最佳答案
您可以做得比简单的重定向更好:您实际上可以在传入的字符流和写入文件之间插入您自己的代码。
基本思想是从filebuf
派生一个类,来控制放入的字符。
你有两种策略:
- 简单的方法是,每次读取
\n
字符时,您都会设置一个标志,然后在第一次put
时插入时间戳(并取消设置标志) ) - 困难的方法是缓冲输出,直到遇到
\n
字符,此时格式化时间戳,然后刷新缓冲区(直到\n
>)
如果我们考虑到每行格式化的开始和结束之间没有太多时间,那么简单的方法应该足够可靠。
我认为覆盖 xsputn
应该足以完成工作。
关于c++ - 添加时间到日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10827776/