WEB开发网
开发学院软件开发VC 一个简单又高效的日志系统 阅读

一个简单又高效的日志系统

 2009-05-18 20:06:14 来源:WEB开发网   
核心提示: CSuperLog::CSuperLog(void){//初始化临界区变量InitializeCriticalSection(&m_csWriteLog);//启动信息m_strWriteStrInfo=WELCOME_LOG_INFO;//CreatetheLoggerthread.m_

CSuperLog::CSuperLog(void)
{
  // 初始化临界区变量
  InitializeCriticalSection(&m_csWriteLog); 
// 启动信息
 m_strWriteStrInfo = WELCOME_LOG_INFO;
  // Create the Logger thread.
  m_hThread = (HANDLE)_beginthreadex( NULL, 0, &LogProcStart, NULL, 0, &m_uiThreadID );

}
unsigned __stdcall CSuperLog::LogProcStart( void* pArguments )
{
  int nCount = 1;
   do 
  {
    Sleep(300);
    if (++nCount % 10 == 0 )
    {
      WriteLog(strTemp, ENUM_LOG_LEVEL_ERROR, true); // 每隔三秒写一次日志
    }
  } while (m_bRun);
}

采有一个全局日志类变量,在构造函数中启动线程,线程每隔三秒去刷新一次文件。

二、日志级别可动态调整

程序的日志一般会进行日志分类,比如说日志级别一般会有调试日志,运行日志,错误日志等分类。在程序发布后运行时一般都会设置在运行日志级别,这时程序中的调试日志就不会被打印出来。如果程序运行中需要定位分析问题时,又需要把日志级别调低,把一些调试信息打印出来。见如下程序实现:

int CSuperLog::WriteLog(CString &strLog,enLogInfoLevel enLevel/* = ENUM_LOG_LEVEL_RUN*/, bool bForce /*= false*/)
{
  if (enLevel < m_iLogLevel)
  {
    return -1;
  }
  。。。
}

对于调整日志级别,我没有把实现放在调用者去设置。而是把这个日志级别信息存放在共享内存中,如果要调整日志级别,则需要一个小工具去改那一个共享内存。实际上在整个设计中我一直想把日志系统设计得更独立一点,尽量不和外部调用程序有更多牵连。

上一页  1 2 3 4  下一页

Tags:一个 简单 高效

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接