记录宏的全局流

时间:2013-07-15 12:00:14

标签: c++ logging macros stream global

我有一个使用多个文件的多线程程序。要记录我的程序的错误和不同信息,我实际上使用在所有其他文件中包含的头文件中定义的以下宏:

#define LOGFILENAME ("log.txt")

#define  TRACE_LOG(msg) \
            do { \
                fstream logFile;\
                logFile.open (((string)LOGFILENAME).c_str(), ios::out | ios::app);\
                logFile << __FILE__<< "\t function:"<<__FUNCTION__<< "\t"<< " (line:  "<< __LINE__<< "): "<<msg <<endl;\
                logFile.close();\
            } while(0)

我想修改这样的功能(不改变原型),以便在每次写入时不打开/关闭文件。然后,我尝试在程序执行期间写入全局流,然后在执行结束时在输出文本文件中写入流。我试过这个:

static std::stringstream LOGSTRINGSTREAM(ios_base::out | ios_base::app);        //global variable in the header file

//新的TRACE_LOG函数:

#define  TRACE_LOG(msg) \
            do { \
                LOGSTRINGSTREAM.seekp(0, std::ios::end);\
                LOGSTRINGSTREAM  << __FILE__<< "\t function:"<<__FUNCTION__<< "\t"<< " (line:  "<< __LINE__<< "): "<<msg <<endl;\
            } while(0)

//在程序执行结束时调用的函数,用于在文件中写入流:

#define WRITE_LOG() \
        do { \
            fstream logFile;\
            logFile.open (((string)LOGFILENAME).c_str(), ios::out | ios::app);\
            logFile << LOGSTRINGSTREAM.str();\
            logFile.close();\
        } while(0)  

当我使用这些修改执行我的程序时,log.txt文件没有实时填充(如预期的那样),但是在程序执行结束时,只有最后一条消息写在log.txt文件中。 我认为全局变量的声明存在问题,但我无法修复它。 谢谢你的帮助。 佛瑞德

0 个答案:

没有答案