LogFile.cpp
上传用户:popouu88
上传日期:2013-02-11
资源大小:2894k
文件大小:2k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // LogFile.cpp: implementation of the CLogFile class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "LogFile.h"
  5. #include <time.h>
  6. #include <stdarg.h>
  7. //////////////////////////////////////////////////////////////////////
  8. // Construction/Destruction
  9. //////////////////////////////////////////////////////////////////////
  10. CLogFile::CLogFile()
  11. {
  12. this->fileName = "";
  13. ::InitializeCriticalSection( &this->session );
  14. }
  15. CLogFile::~CLogFile()
  16. {
  17. ::DeleteCriticalSection( &this->session );
  18. }
  19. void CLogFile::SetFileName( const string filename )
  20. {
  21. if( filename.length( ) )
  22. this->fileName = filename;
  23. }
  24. void CLogFile::Write( const char * fmt , ... )
  25. {
  26. ::EnterCriticalSection( &this->session );
  27. try
  28. {
  29. string msg = "";
  30. int d;
  31. char buf[ 255 ];
  32. va_list ap;
  33. va_start( ap , fmt );
  34. while ( *fmt ) 
  35. {
  36. if (*fmt != '%') 
  37. {
  38. msg += * fmt++;
  39. continue;
  40. }
  41. switch ( * ++ fmt )
  42. {
  43.             case 's':
  44.                 msg += va_arg( ap , const char * );
  45.                 break;
  46.             case 'd':
  47.                 d = va_arg( ap , int );
  48.                 itoa(d, buf, 10);
  49. msg += buf;
  50.                 break;
  51.             default:  
  52.                 
  53.                 break;
  54. }
  55. fmt++;
  56. }
  57. va_end( ap );
  58. if( ! msg.empty( ) )
  59. {
  60. time_t t;
  61. ::time( & t );
  62. struct tm * tm = ::localtime( & t );
  63. char szTime[ 100 ];
  64. sprintf( szTime , "【%d-%d-%d  %d:%d:%d】rn" , tm->tm_year + 1900, tm->tm_mon + 1 , tm->tm_mday , tm->tm_hour , tm->tm_min , tm->tm_sec );
  65. msg = ( string )szTime + msg + "rn";
  66. if( ! this->fileName.empty( ) )
  67. {
  68. FILE * file = ::fopen( this->fileName.c_str( ) , "a+" );
  69. if( file )
  70. {
  71. ::fwrite( msg.c_str( ) , msg.length( ) , sizeof( char ) , file );
  72. ::fclose( file );
  73. }
  74. }
  75. printf( msg.c_str( ) );
  76. }
  77. }
  78. catch( ... )
  79. {
  80. }
  81. ::LeaveCriticalSection( &this->session );
  82. }