保存日志文本文件,无论崩溃

时间:2013-05-22 14:19:34

标签: c++ c++-cli

我的程序将各种日志信息保存到文本文件中。但是如果程序因内存访问冲突等问题而崩溃,则日志文本文件中没有任何内容。

我认为这是因为程序无法关闭打开的日志文本文件。

目前,我使用 FILE * 来保存日志文本文件。我可能每次都可以打开和关闭来编写每个日志,但我认为这是太多的开销。

有没有其他方法可以保留日志,无论程序崩溃或意外停止?

我确实希望在程序崩溃之前看到日志。

我正在为我的程序使用C ++ / CLI。非常感谢你提前。

    FILE* logfile;        
    errno_t err;
    char LogFileNameBuf[512] = {0,};
    sprintf_s(LogFileNameBuf, "LogFile.txt");
    err = fopen_s(&logfile, LogFileNameBuf, "wt");

    if(logfile != NULL)
    {
        bLogfile = true;
        GetLocalTime(&st);
        sprintf_s(logBuf, "[%04d-%02d-%02d][%02d:%02d:%02d] SUCCESS:: Log Started\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
        fputs(logBuf, logfile); 
    }

    // close log file
    if(bLogfile == true) 
    {
        GetLocalTime(&st);
        sprintf_s(logBuf, "[%04d-%02d-%02d][%02d:%02d:%02d] SUCCESS:: Log File Closed\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
        fputs(logBuf, logfile);
        fclose(logfile);
    }

1 个答案:

答案 0 :(得分:1)

您可以尝试使用fflush()强制在文件中执行I / O操作。每次在日志中写入时都可以这样做,以确保尽可能多地写入数据。

虽然我建议,在使用C ++时,使用fstream代替FILE*