免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1364 | 回复: 0
打印 上一主题 下一主题

[备份] 小日志类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-28 09:14 |只看该作者 |倒序浏览

#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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP