我最近开始设计一个有一定规模的软件,估计行数在5万行以上。之前写了一个版本,写了1万多行,发现很难再扩展,下了一番决心以后,决定推倒重来。一开始我需要设计一个方便调试的机制。那么如何记录log信息便成为一个现实的问题。我想请教大家在写自己的程序的时候,一般是怎么进行log的?
请大家不吝赐教,分不是问题:)

解决方案 »

  1.   

    回复人: simouse() ( ) 信誉:98  2004-10-01 14:12:00  得分: 0  
     
     
       我一向写一个单件,让它来决定格式和文件怎么存
      
     
    ------------------------------------------------------
    单件何意?一个单独的类(比方说CLog)吗?那么尚有另外一个问题,需要log的地方,是CLog::WriteLog(UINT uErrorCode) ,还是 CLog::WriteLog(const char *) 呢?也就是说,解析出错码的任务,交给CLog还是程序本身? 回复人: kugou123(酷狗)(每天学VC,补充你我的维C) ( ) 信誉:100  2004-10-01 14:13:00  得分: 0  
     
     
       是记录调试日志吗?
      
    ---------------------------------------------
    就是这个东西 
      

  2.   

    简单的方法记录成一个文本就可以了
    文本文件名:YYYY-MM-DD.log
    内容:
    HH:MM:SS 具体要记录的内容(如程序运行到了哪个函数内,这里某些变量的值...)
      

  3.   

    如果仅仅是调试的话,用dbgview如果想写保存log文件的话,也很简单啊void CErrorLog::FT_LogEntry(char *FunctionName, char *ProcessDesc,
    EPAS_STATUS rv, EPAS_STATUS level)
    {#ifdef _DEBUG
    {
    FILE*  log = NULL;

    if(level> m_loging_level)
    return;

    log = fopen(m_logging_file,"a");

    #if defined(DEBUG) 
    if(log == NULL)
    {
    MessageBox(NULL, "FT_LogEntry: could not open Log-file", 
    "FT_ND_API Notice", MB_OK|MB_ICONWARNING);
    return;
    }
    #else
    if(log == NULL)
    return;
    #endif  

    FunctionName = (FunctionName == NULL)? (char*)"(NULL)" : FunctionName;
    ProcessDesc = (ProcessDesc == NULL)? (char*)"(NULL)" : ProcessDesc;

    fprintf(log,"/* %s()", FunctionName);
    fprintf(log,": %s ", ProcessDesc);
    fprintf(log,"(%s) */\n", FT_GetErrorMsg(rv));

    fclose(log); }
    #endif

    return;
    }
      

  4.   

    模式里有单件的概念,你说的那个CLog和我的很相似,我把它写成表态函数,用CLog::WriteLog( int nLevel, LPCTSTR strLog );这样写,至于写到哪儿不用关心,我一向喜欢用日期当文件名写个文本文件
      

  5.   

    回复人: simouse() ( ) 信誉:98  2004-10-01 16:30:00  得分: 0  
     
     
       模式里有单件的概念,你说的那个CLog和我的很相似,我把它写成表态函数,用CLog::WriteLog( int nLevel, LPCTSTR strLog );这样写,至于写到哪儿不用关心,我一向喜欢用日期当文件名写个文本文件
      
    ------------------------------------------------------------------呵呵,刚才睡了一觉,刚刚起来。我觉得其实也没什么必要用单件,嗯,我一开始的设计是使用静态函数。CXXLog::Log2File()这样的形式。CXXLog内部静态保留了一份log文件名:)哎,这个问题讲不大清楚。我总觉得怎么写,都不是很优雅。所以一直苦恼。哈哈
      

  6.   

    to  skyonline(山中过客) 您的方法是我一开始就使用的。
    同时我还有一部分处理是限制log文件大小的。
    我觉得你这样传入一个字符串,也就是说调用log函数的地方自己得加载字串,使用传入一个error code的方法会否更好一点,然后CXXLog::Code2String()根据errcode得到string,然后写入文件?
    我突然觉得如果使用xml记录log可能会很漂亮。哈哈。