如何在C ++中的日志文件中编写一些跟踪

时间:2014-08-25 08:47:09

标签: c++ trace logfiles logfile

我想在日志文件中写下执行日期和文件执行结束。

我无法安装任何东西,只需使用标准模块(我在linux的命令行中执行我的代码)。

我想要这样的事情: [TRACE] 2014-07-24 14:18:50,2014-07-24 14:18:52

我暂时有这个结果:

[TRACE] , Start date of execution : Aug 25 2014 : 10:43:02 End date of execution : Mon Aug 25 10:43:06 2014

这里是我的代码:

#include <iostream>
#include <string>
#include <fstream>
#include <ctime>

using namespace std;

void startDateExecution(fstream& file) {

    if(fichier)
    {
         file << "[TRACE]" << " , " << "Start date of execution : " << __DATE__ << " : " << __TIME__ << endl;     
    }
    else
         cerr << "Unable to open file" << endl;
}

void endDateExecution(fstream& file) {

        time_t result = time(NULL);
        file << "End date of execution : " << asctime(localtime(&result)) << endl;

        file.close();
}

void displayDate(fstream& file) {

     startDateExecution(file);
     endDateExecution(file);         
}

int main(){

      fstream file("trace.log", ios::out | ios::trunc);
      displayDate(file);
      return 0;  
}

2 个答案:

答案 0 :(得分:1)

您可以使用log4cpp库。它还有很多其他功能。以下网站提供了示例程序。

http://log4cpp.sourceforge.net/

您只需根据需要实例化appender。我在我的项目中使用了RollingFileAppender,我需要在一些阈值(即文件大小达到1MB)之后分割日志文件。然后,您需要设置要在其中写入日志的模式。

希望这会有所帮助。

答案 1 :(得分:1)

许多人评论过,__DATE____TIME__是指编译的时间,而不是执行。
您需要在执行的开始和结束时检索当前时间;在这两种情况下,你将使用相同的方法,无论你使用哪种方法。

以下是使用strftime格式化时间的示例。

std::string format(time_t when)
{
    char timestr[256] = {0};
    const char* my_format = "%m/%d/%y @ %H:%M:%S"; 
    std::strftime(timestr, sizeof(timestr), my_format, std::localtime(&when));
    return timestr;
}

您可以这样使用它:

int main()
{
    time_t start = std::time(NULL);
    // Do stuff
    time_t end = std::time(NULL);

   std::cout << "Start: " << format(start) << std::endl
             << "End: "   << format(end)   << std::endl;
}

阅读the documentation for strftime以了解如何指定自己的格式。