Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向日志添加时间_C++_Logging_Stderr_Sfml - Fatal编程技术网

C++ 向日志添加时间

C++ 向日志添加时间,c++,logging,stderr,sfml,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 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或任何其他类似函数的人。

如果您可以修改执行实际打印的函数,那么可以(我建议您查找函数
time
ctime
localtime
strftime
)。如果您不能修改函数,那么不。

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

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

你有两种策略:

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

如果认为每条线的起始和结束之间没有太多的时间,那么简单的方法应该足够可靠。


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

可能的重复:我已经可以以字符串的形式获取时间,但我需要在每个stderr日志前面加上它的前缀…你看过fprintf吗?stderr可以用作任何期望输出流作为其参数之一的函数的参数。如果您愿意,它基本上可以防止您将日志记录与常规错误输出分离…我认为这发生在他们的库中,我不想触碰它们并冒着破坏某些东西的风险…+1此建议与他们的文档相匹配:(虽然sf::err()来自SFML 2.0,但我确信它对std::cerr也适用)