首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

哪位高手有好的全局日志类,支持日志级别的

2012-03-12 
谁有好的全局日志类,支持日志级别的谁有好的全局日志类,支持日志级别的,能给出实现方法吗,最好有源码[解决

谁有好的全局日志类,支持日志级别的
谁有好的全局日志类,支持日志级别的,能给出实现方法吗,最好有源码

[解决办法]
// Log.cpp: implementation of the CLog class.
//
//////////////////////////////////////////////////////////////////////
#include "Log.h "
#include <string.h>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CLog* CLog::m_pInstance = NULL;
CLog* CLog::m_errinistance = NULL;
CLog::CLog()
{
m_curlever=SM;
m_bIsTrace=false;
m_IsWriteErro=false;
oldMonth=0;
}

CLog::~CLog()
{
MUTEX_LOCK_DESTROY(&m_FileLock);
}

void CLog::Init(char *logname,int curlever,bool iserro)
{
MUTEX_LOCK_INIT(&m_FileLock);
m_logname=logname;
m_curlever=curlever;
m_IsWriteErro=iserro;
}

bool CLog::OpenLog()
{
if(m_ldf.is_open())
m_ldf.close();


time_t tTime;
time(&tTime);
struct tm* ptmTemp = localtime(&tTime);

char szTempTime[32];
strftime(szTempTime, sizeof(szTempTime), "%m-%d.%H-%M-%S ", ptmTemp);
CString strdd;
strdd=GetAppPath();
char tmp[10];
GetPrivateProfileString( "LOG ", "LOGPATH ", "..\\log ",tmp,10,CONFIG_FILE_PATH);
CString cszFileName ;
cszFileName.Format( "%s%s%s ",tmp, "\\ ",m_logname);
cszFileName += szTempTime;
if(m_IsWriteErro==false)
cszFileName += ".log ";
else
cszFileName+= ".erro ";

m_ldf.open(cszFileName, ios::app);
if(!m_ldf.is_open())
{
printf( "the log file %s can 't be open\n ",cszFileName);
m_bIsTrace=false;
return false;
}
//printf( "have open a log file %s\n ",cszFileName.c_str());
SYSTEMTIME tTimem;
GetLocalTime(&tTimem);
oldMonth=tTimem.wYear*100+tTimem.wMonth;
m_bIsTrace=true;
return true;
}

bool CLog::OpenLog(char *logname,int curlever)
{

m_logname=logname;
m_curlever=curlever;

return OpenLog();


}

void CLog::Trace(int lever, char *str,...)
{
try{
if(lever > CLog::Instance()-> m_curlever)
return;
va_list args;
va_start(args, str);
int nBuf;
char szBuffer[512];
memset(szBuffer, 0, sizeof(szBuffer));
char szTime[32];
SYSTEMTIME tTime;
GetLocalTime(&tTime);
sprintf(szTime, "%02d-%02d %02d:%02d:%02d.%03d ",
tTime.wMonth, tTime.wDay, tTime.wHour, tTime.wMinute, tTime.wSecond, tTime.wMilliseconds);
nBuf = _vsnprintf(szBuffer, 512, str, args);
va_end(args);
int newMonth=tTime.wYear*100+tTime.wMonth;
if( CLog::Instance()-> oldMonth < newMonth)
{
CLog::Instance()-> NewLog();
}
CString szTemp;
szTemp += "【 ";
szTemp += szTime;
szTemp += "】 ";
szTemp += szBuffer;
CLog::Instance()-> WriteLog(szTemp);

}catch(...){}

}

void CLog::TraceErro(int lever, char *str,...)
{
try{
if(lever> CLog::ErroIn()-> m_curlever)
return;
char szTime[32];

SYSTEMTIME tTime;
GetLocalTime(&tTime);
sprintf(szTime, "%02d-%02d %02d:%02d:%02d.%03d ",
tTime.wMonth, tTime.wDay, tTime.wHour, tTime.wMinute, tTime.wSecond, tTime.wMilliseconds);








}
catch(...){}

}
void CLog::NewLog()
{
CloseLog();

OpenLog();
}
void CLog::WriteLog(const char* lpszBuffer)
{
if( !m_bIsTrace)
return ;

LOCK(&m_FileLock);
m_nTotalLogTimes++;
if(m_nTotalLogTimes == MaxFileLine )
{
NewLog();
m_nTotalLogTimes = 0;
}

m_ldf < < lpszBuffer < < endl ;
//m_cLogFile.flush();
UNLOCK(&m_FileLock);

printf( "%s\n ",lpszBuffer);
}
bool CLog::CloseLog()
{
if (m_bIsTrace)
{
m_bIsTrace=false;
m_ldf.close();
}
return true;
}


[解决办法]
给你参考下:
http://www.itcomputer.com.cn/Programs/Delphi/zh/200512/6173.html
http://www.softat.org/viewthread.php?tid=67273
[解决办法]
log4cxx
http://logging.apache.org/log4cxx/

开源的C++日志类库

热点排行