00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "fsProgramLogMgr.h"
00008 #include <float.h>
00009
00010 #ifdef _DEBUG
00011 #undef THIS_FILE
00012 static char THIS_FILE[]=__FILE__;
00013 #define new DEBUG_NEW
00014 #endif
00015
00016 fsProgramLogMgr::fsProgramLogMgr()
00017 {
00018 Set_DoLog (TRUE);
00019 InitializeCriticalSection (&m_csLogFileOp);
00020 m_hLogFile = INVALID_HANDLE_VALUE;
00021 }
00022
00023 fsProgramLogMgr::~fsProgramLogMgr()
00024 {
00025 DeleteCriticalSection (&m_csLogFileOp);
00026
00027 if (m_hLogFile != INVALID_HANDLE_VALUE)
00028 CloseHandle (m_hLogFile);
00029 }
00030
00031 void fsProgramLogMgr::Set_DoLog(BOOL bDo)
00032 {
00033 m_bDoLog = bDo;
00034 }
00035
00036 BOOL fsProgramLogMgr::Initialize(LPCSTR pszLogFileName)
00037 {
00038 m_hLogFile = CreateFile (pszLogFileName, GENERIC_WRITE, FILE_SHARE_READ,
00039 NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
00040
00041 if (m_hLogFile == INVALID_HANDLE_VALUE)
00042 return FALSE;
00043
00044 SetFilePointer (m_hLogFile, 0, NULL, FILE_END);
00045
00046 return TRUE;
00047 }
00048
00049 BOOL fsProgramLogMgr::EraseLog()
00050 {
00051 LockFileOperations ();
00052
00053 SetFilePointer (m_hLogFile, 0, NULL, FILE_BEGIN);
00054 BOOL b = SetEndOfFile (m_hLogFile);
00055
00056 UnlockFileOperations ();
00057
00058 return b;
00059 }
00060
00061 void fsProgramLogMgr::LockFileOperations()
00062 {
00063 EnterCriticalSection (&m_csLogFileOp);
00064 }
00065
00066 void fsProgramLogMgr::UnlockFileOperations()
00067 {
00068 LeaveCriticalSection (&m_csLogFileOp);
00069 }
00070
00071 BOOL fsProgramLogMgr::FlushBuffer()
00072 {
00073 LockFileOperations ();
00074
00075 DWORD dwWritten = 0;
00076 DWORD dwLen = m_strLogBuffer.Length ();
00077
00078 if (dwLen > 0)
00079 {
00080 WriteFile (m_hLogFile, m_strLogBuffer, dwLen, &dwWritten, NULL);
00081 m_strLogBuffer = "";
00082 }
00083 else
00084 {
00085 dwWritten = dwLen;
00086 }
00087
00088 UnlockFileOperations ();
00089
00090 return dwWritten == dwLen;
00091 }
00092
00093 void fsProgramLogMgr::AddStringToLog(LPCSTR psz)
00094 {
00095 if (m_bDoLog == FALSE)
00096 return;
00097
00098 LockFileOperations ();
00099 m_strLogBuffer += psz;
00100 FlushBuffer ();
00101 UnlockFileOperations ();
00102 }
00103
00104 fsProgramLogMgr& fsProgramLogMgr::operator <<(LPCSTR psz)
00105 {
00106 if (m_bDoLog == FALSE)
00107 return *this;
00108
00109 LockFileOperations ();
00110 if (psz == nl)
00111 {
00112 SYSTEMTIME time;
00113 GetLocalTime (&time);
00114 operator << (" (");
00115 operator << (time.wHour);
00116 operator << (":");
00117 operator << (time.wMinute);
00118 operator << (":");
00119 operator << (time.wSecond);
00120 operator << (")");
00121 }
00122 AddStringToLog (psz);
00123 UnlockFileOperations ();
00124
00125 return *this;
00126 }
00127
00128 fsProgramLogMgr& fsProgramLogMgr::operator <<(int i)
00129 {
00130 if (m_bDoLog == FALSE)
00131 return *this;
00132
00133 char sz [100];
00134 itoa (i, sz, 10);
00135 return operator << (sz);
00136 }
00137
00138 fsProgramLogMgr& fsProgramLogMgr::operator <<(DWORD dw)
00139 {
00140 if (m_bDoLog == FALSE)
00141 return *this;
00142
00143 char sz [100];
00144 sprintf (sz, "%u", dw);
00145 return operator << (sz);
00146 }
00147
00148 fsProgramLogMgr& fsProgramLogMgr::operator <<(double d)
00149 {
00150 if (m_bDoLog == FALSE)
00151 return *this;
00152
00153 char sz [100];
00154 sprintf (sz, "%.*g", FLT_DIG, d);
00155 return operator << (sz);
00156 }
00157
00158 fsProgramLogMgr& fsProgramLogMgr::operator <<(UINT64 u)
00159 {
00160 if (m_bDoLog == FALSE)
00161 return *this;
00162
00163 char sz [100];
00164 _i64toa (u, sz, 10);
00165 return operator << (sz);
00166 }