- 论坛徽章:
- 0
|
#include "CLog.h"
bool CLog::open()
{
fd = ::open(logFile.c_str(), O_WRONLY | O_APPEND | O_CREAT, 0777 );
if( fd == -1 )
{
perror("open");
return false;
}
IsOpen = true;
return true;
}
void CLog::log(const char* format, ...)
{
std::string strTemp;
if( IsOpen )
{
ssize_t len = 0;
va_list ap;
char c;
bool IsTag = false;
bool IsVar = false;
va_start(ap, format);
while( c = *format++ )
{
if(c == '%' && !IsTag )
IsTag = true;
else
{
if(IsTag && (c == 's' || c == 'c'))
{
IsVar = true;
}
IsTag = false;
}
//printf("%c",c);
if(IsVar)
{
switch(c)
{
case 'c':
{
char ch = va_arg(ap, int);
strTemp += ch;
break;
}
case 's':
{
char *p = va_arg(ap, char*);
strTemp += p;
break;
}
default :
strTemp += c;
}
IsVar = false;
}
else
{
if(!IsTag)
strTemp += c;
}
}
va_end(ap);
strTemp += "\n";
len = write(fd, strTemp.c_str(), strTemp.length());
if( len == -1 )
{
perror("log");
}
}
}
bool CLog::close()
{
if( IsOpen )
if( ::close(fd) == -1 )
{
perror("close");
}
IsOpen = false;
return true;
}
bool CLog::setLogFile(const std::string &newLogFile)
{
//若已经打开,先关闭日志,所以设置了新的文件名后,需要调用者重新打开日志
if( IsOpen )
if( ::close(fd) == -1 )
{
perror("setLogFile");
return false;
}
IsOpen = false;
logFile = newLogFile;
return true;
}
bool CLog::flush()
{
if( IsOpen )
{
int ret = fsync( fd );
if( ret == -1)
{
perror("flush");
return false;
}
}
return true;
}
/*
int main()
{
CLog clog;
clog.open();
clog.log("log %s","content");
clog.log("%s log2 %s teAsbt","start","end");
return 0;
}
*/
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/109164/showart_2162786.html |
|