在您的程序里面,是如何进行log的?欢迎大家讨论:) 我最近开始设计一个有一定规模的软件,估计行数在5万行以上。之前写了一个版本,写了1万多行,发现很难再扩展,下了一番决心以后,决定推倒重来。一开始我需要设计一个方便调试的机制。那么如何记录log信息便成为一个现实的问题。我想请教大家在写自己的程序的时候,一般是怎么进行log的?请大家不吝赐教,分不是问题:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 回复人: 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 是记录调试日志吗? ---------------------------------------------就是这个东西 简单的方法记录成一个文本就可以了文本文件名:YYYY-MM-DD.log内容:HH:MM:SS 具体要记录的内容(如程序运行到了哪个函数内,这里某些变量的值...) 如果仅仅是调试的话,用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;} 模式里有单件的概念,你说的那个CLog和我的很相似,我把它写成表态函数,用CLog::WriteLog( int nLevel, LPCTSTR strLog );这样写,至于写到哪儿不用关心,我一向喜欢用日期当文件名写个文本文件 回复人: simouse() ( ) 信誉:98 2004-10-01 16:30:00 得分: 0 模式里有单件的概念,你说的那个CLog和我的很相似,我把它写成表态函数,用CLog::WriteLog( int nLevel, LPCTSTR strLog );这样写,至于写到哪儿不用关心,我一向喜欢用日期当文件名写个文本文件 ------------------------------------------------------------------呵呵,刚才睡了一觉,刚刚起来。我觉得其实也没什么必要用单件,嗯,我一开始的设计是使用静态函数。CXXLog::Log2File()这样的形式。CXXLog内部静态保留了一份log文件名:)哎,这个问题讲不大清楚。我总觉得怎么写,都不是很优雅。所以一直苦恼。哈哈 to skyonline(山中过客) 您的方法是我一开始就使用的。同时我还有一部分处理是限制log文件大小的。我觉得你这样传入一个字符串,也就是说调用log函数的地方自己得加载字串,使用传入一个error code的方法会否更好一点,然后CXXLog::Code2String()根据errcode得到string,然后写入文件?我突然觉得如果使用xml记录log可能会很漂亮。哈哈。 自组织映射算法中的不解 如何在wince5.0下实现如真实“翻书”的效果,UI设计? 求教 xml文件内容提取及添加 帮我看看这个语句怎么改 [求助]在对话框上编程创建一个按钮,运行时出现Debug Assertion Failed,请求各位高手解答! 这问题该在哪里问嘛? 利用VC如何进行屏幕打印,并且把图片压缩存储呀 调用打印对话框按取消出现错误。。。。。。 请问我编好了个VC程序,怎么样才能让它能在windows下执行呢?谢谢了. 谁能帮我解答子分类和超分类的概念和用处! 编程如何取得网络连接的即时流量? C++
我一向写一个单件,让它来决定格式和文件怎么存
------------------------------------------------------
单件何意?一个单独的类(比方说CLog)吗?那么尚有另外一个问题,需要log的地方,是CLog::WriteLog(UINT uErrorCode) ,还是 CLog::WriteLog(const char *) 呢?也就是说,解析出错码的任务,交给CLog还是程序本身? 回复人: kugou123(酷狗)(每天学VC,补充你我的维C) ( ) 信誉:100 2004-10-01 14:13:00 得分: 0
是记录调试日志吗?
---------------------------------------------
就是这个东西
文本文件名:YYYY-MM-DD.log
内容:
HH:MM:SS 具体要记录的内容(如程序运行到了哪个函数内,这里某些变量的值...)
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;
}
模式里有单件的概念,你说的那个CLog和我的很相似,我把它写成表态函数,用CLog::WriteLog( int nLevel, LPCTSTR strLog );这样写,至于写到哪儿不用关心,我一向喜欢用日期当文件名写个文本文件
------------------------------------------------------------------呵呵,刚才睡了一觉,刚刚起来。我觉得其实也没什么必要用单件,嗯,我一开始的设计是使用静态函数。CXXLog::Log2File()这样的形式。CXXLog内部静态保留了一份log文件名:)哎,这个问题讲不大清楚。我总觉得怎么写,都不是很优雅。所以一直苦恼。哈哈
同时我还有一部分处理是限制log文件大小的。
我觉得你这样传入一个字符串,也就是说调用log函数的地方自己得加载字串,使用传入一个error code的方法会否更好一点,然后CXXLog::Code2String()根据errcode得到string,然后写入文件?
我突然觉得如果使用xml记录log可能会很漂亮。哈哈。