C++实现简单日志类

一个简单的记录日志至文件或者(标准输出及错误文件),不包括系统日志。

直接上代码:

LogFile.h

#ifndef LOG_FILE_INC
#define LOG_FILE_INC

class LogFile
{
public:
   LogFile() ;
   virtual ~LogFile() ;

   static void open( const char *logFName_ ) ;
   static void close() ;
   static void puts( const char *str ) ;
   static void date( const char *prefixStr ) ;
   static void hostname( const char *prefixStr ) ;
   static void printf( const char *msg , ... ) ;
   static FILE *getFD() { return outFD ; } ;

private:
   static char        *logFName ;
   static FILE        *outFD ;
};

#endif

LogFile.cpp

#include "LogFile.h"
#include "time.h"
#include "unistd.h"

FILE *LogFile::outFD = NULL ;
char *LogFile::logFName = NULL ;


LogFile::LogFile()
{
}


LogFile::~LogFile()
{
}

void LogFile::open( const char *logFName_ )
{
   if ( outFD != NULL )
      error("LogFile::open - outFD != NULL. File already open.") ;

   if ( (logFName_ == NULL) || (logFName_[0] == '\0') )
      return ;

   if ( strcmp( logFName_ , "stdout" ) == 0 )
      outFD = stdout ;
   else if ( strcmp( logFName_ , "stderr" ) == 0 )
      outFD = stderr ;
   else
   {
      logFName = new char[strlen(logFName_)+1] ;
      strcpy( logFName , logFName_ ) ;

      if ( (outFD = fopen( logFName , "wb" )) == NULL )
         error("LogFile::init - error opening log file: %s" , logFName) ;
   }
}


void LogFile::close()
{
   if ( (outFD != NULL) && (outFD != stdout) && (outFD != stderr) )
      fclose( outFD ) ;
   outFD = NULL ;
   delete [] logFName ;
   logFName = NULL ;
}

void LogFile::puts( const char *str )
{
   if ( outFD == NULL )
      return ;

   if ( (str == NULL) || (str[0] == '\0') )
      error("LogFile::puts - str undefined") ;

   fputs( str , outFD ) ;
   fflush( outFD ) ;
}


void LogFile::date( const char *prefixStr )
{
   if ( outFD == NULL )
      return ;

   if ( prefixStr != NULL )
   {
      fprintf( outFD , "%s " , prefixStr ) ;
   }

   time_t t = time(NULL) ;
   fputs( ctime( &t ) , outFD ) ;
   fflush( outFD ) ;
}

void LogFile::hostname( const char *prefixStr )
{
   if ( outFD == NULL )
      return ;

   if ( prefixStr != NULL )
   {
      fprintf( outFD , "%s " , prefixStr ) ;
   }

   char str[100] ;
   if ( gethostname( str , 100 ) < 0 )
   {
      fprintf( outFD , "UNKNOWN HOST\n" ) ;
   }
   else
   {
      fprintf( outFD , "%s\n" , str ) ;
   }
   fflush( outFD ) ;
}


void LogFile::printf( const char *msg , ... )
{
   if ( outFD == NULL )
      return ;

   va_list args ;
   va_start( args , msg ) ;
   vfprintf( outFD , msg , args ) ;
   va_end(args);
   fflush( outFD ) ;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值