对轻量级C++日志类[转]

//log.h
//hujinshan@2004.1.3 Airforce Engineering University
/*
//CLog* CLog::_instance = NULL;
 
CLog::GetObj().Write( "******* 初始化完成 *******" );
CLog::GetObj().tmWrite( "******* 开始渲染No1. *******" );
CLog::GetObj();
 
 Clog文件中有 #define CLog /##/ 的语句,
 这是为了使日志在release版无效,
 使用单行注释,所以如果调用时如果要换行,
 请务必在换行最后加上 / 符号,
 
*/
 
/*#ifndef _DEBUG
#define CLog /##/
#define _CLOG_H
#endif*/
 
#ifndef _CLOG_H
#define _CLOG_H
 
#include <fstream>
#include <ctime>
 
classCLog
{
         CLog()
         {      
                   pfnewofstream ("inmstrace.log"ios::app);
         }
 
         static CLog_instance;
         ofstreampf;
public:
         ~CLog()
         {
                  _instance=0;                  
                  pf->close();
         }
 
         static CLogGetPtr()
         {
                  if(!_instance)
                            _instance=newCLog;
                  return(_instance);
         }
 
         static CLogGetObj()
         {
                  if(!_instance)
                            _instance=newCLog;
                  return(*_instance);
         }
 
         template<classT> inline CLogWrite(Tval)
         {
                   (*pf) << val ;
                  pf->flush();
                   return *this;
         }
        
         template<classT> inline CLogtmWrite(Tval)
         {
        charstrBuf[50];       
        time_tltime;
        time( &ltime );
        struct tm *today = localtime( &ltime );
        sprintf(strBuf"%4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d ",
            today->tm_year+1900, today->tm_mon+1, today->tm_mdaytoday->tm_hour,
            today->tm_mintoday->tm_sec);
       
                   (*pf) << strBuf << val << "/r/n";
                  pf->flush();
                   return *this;
         }
 
         template<classT> inline CLog& operator<< (Tval)
         {
                   (*pf) << val ;
                  pf->flush();
                   return *this;
         }
 
};
 
#endif
posted @ 2012-07-17 16:31  瑞尼书苑  阅读(409)  评论(0)    收藏  举报